2015-07-28 4 views
7

Я реализую OAuth (используя rauth) и буду давать токены JWT (используя flask-jwt), интерфейс javascript (Angular1). Я сделал это для классического приложения cookie/session. Оно работает. Теперь я хочу сделать это с помощью токенов JWT.Как предоставить пользователю токен JWT после перенаправления провайдера OAuth?

Если я правильно понял, пользователь перенаправляется провайдеру (например, Google), логин, мой сервер и поставщик делают магию, а затем провайдер перенаправляет пользователя обратно на мою страницу. Теперь я получил профиль пользователя и заканчивает часть OAuth. При обычной сессии вы даете пользователям файлы cookie и остальную часть информации для настройки сеанса, а затем перенаправляете его на домашнюю страницу.

Здесь я застрял. Есть ли хорошая практика, как дать токен пользователю JWT после того, как поставщик отправит его обратно? Предоставить его пользователю как cookie при переадресации на домашнюю страницу? Поместить его в заголовок? Насколько мне известно, мне нужен javascript для сохранения токена в LocalStorage/SessionStorage.

ответ

6

В конце дня пользователь будет перенаправлен обратно в наше приложение, где теперь нужно будет отобразить страницу. Единственный вариант, который я вижу, - это вернуть JWT в качестве файла cookie, поскольку заголовки ответов недоступны в Javascript &, единственным другим местом было бы встроить его в DOM, который откроет его для атак CSRF.

Когда браузер перенаправляется с поставщика OAuth, он будет иметь только код доступа, который можно обменять на токен доступа на стороне сервера. Но лучшая практика говорит, что вам нужно сохранить секретный токен доступа (не передавать его обратно в браузер).

Существует много споров о JWT в файлах cookie и локальном/сеансовом хранилище, но в этом случае я не вижу другого выбора, кроме как использовать файлы cookie. Все случаи использования, которые я видел, которые описывают использование памяти в браузере, предполагают, что XHR-запрос выполняется для получения JWT. Но это не вариант в потоке OAuth, потому что весь браузер только что перенаправлен обратно в наше приложение.

Я не вижу другого варианта (для варианта использования OAuth), кроме сохранения JWT в cookie, который будет использоваться для будущих вызовов API. Но, может быть, я что-то упустил.

Смежные вопросы