OAuth2, API и JavaScript-приложения - на стороне сервера проверки токена или на стороне клиента? - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в OAuth2 и одностраничных приложениях (SPA) и думаю о создании приложения, использующего тип предоставления implicit.

Я использую VUEJS (аналогично React или Angular) для приложений JavaScript.

Я запутался в процессе представления токена доступа к защищенному ресурсу и о том, должен ли разработчик SPAпроверить токен доступа в этой точке или это услуга, обычно предоставляемая разработчиком защищенного ресурса?

Вот мой ход, чтобы я мог лучше проиллюстрировать свою путаницу:

  1. И клиентское SPA (скомпилированное через веб-пакет), и защищенный ресурс / данные будут находиться в того же домена / сети и использовать сервер авторизации (также в том же домене)

  2. Сервер авторизации обеспечит авторизацию через службу единого входа (SSO), где я смогу зарегистрировать приложение и получить client_id для использования в моем коде SPA.Не требуется CLIENT_SECRET из-за типа предоставления implicit.

  3. Как только пользователь переходит на https://my-spa.com, приложение загружается, а затем проверяет по localStorage, существует ли токен,

Вот пример моей логики кода и маршрутизатора:

router.beforeEach((to, from, next) => {

        const token = window.localStorage.getItem('tokens-myProvider')

        if (to.matched.some(record => record.meta.requiresAuth)) {
            //if token exists, continue user to protected resource
            if (token !== null) {
                next()
            } else {
                //if no token exists, send to landing page with login button
                next({
                    path: '/',
                    query: {
                        redirect: to.fullPath
                    }
                })
            }
        } else {
            // if token exists and user navigates to root, redirect to /protected-resource
            if (token !== null && to.path == '/') {
                next({ path: '/protected-resource' })
            } else {
                next() // make sure to always call next()!
            }
        }
    })
Как видите, если токена не существует, приложение предложит пользователю целевую страницу и кнопку входа в систему.Эта кнопка входа перенаправит пользователя на сервер авторизации, где он может ввести свое имя пользователя и пароль для аутентификации.Если он действителен, он будет перенаправлен на страницу приложения /protected-resource с токеном доступа в параметрах ответа.

Мой вопрос ...

Должен ли SPA делать что-либо еще в этот момент для проверки токена?Говорит ли разработчик внешнего интерфейса SPA «вот мой токен, подтвердите его для меня» защищенному серверу ресурсов или ожидается, что разработчик SPA выполнит эту функцию в своем коде SPA от имени защищенного ресурса?Проверяет ли серверная сторона на сервере ресурсов?Допустим, токен поступает как объект JSON

Наконец, ... служба SSO предоставляет конечную точку, которая возвращает ключи проверки JWT.Нужно ли это где-то вставлять в код SPA?Не уверен, что это ...

...