OAuth: авторизация и запуск сеанса одновременно - PullRequest
0 голосов
/ 28 декабря 2018

Насколько я понимаю, токены доступа OAuth2 не предназначены для использования в качестве идентификаторов сеансов.

У меня есть одностраничное приложение JavaScript (в приложении Cordova).Он использует OAuth2 для получения доступа к некоторым веб-сервисам.Но Я хотел бы начать сеанс одновременно с тем, что пользователь авторизует с помощью OAuth, чтобы я мог реализовать истечение срока сеанса и выход из него.

В этом случае будет лицелесообразно сделать следующее?

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

Я думаю что-то вроде этого.Это в значительной степени стандартный поток кода авторизации, но с шагами 5-9, введенными для обработки сеанса.

  1. приложение загружает URL авторизации OAuth в отдельном окне
  2. пользователь вводит учетные данные
  3. перенаправляет URL-адрес, вызывает сервер приложений и отправляет туда код авторизации
  4. сервер приложений обменивает код авторизации на токены доступа / обновления и сохраняет их в базе данных
  5. запускается сервер приложенийсеанс и возвращает идентификатор сеанса в виде переменной JavaScript в ответе
  6. приложение использует межоконный обмен данными (например, postMessage) для получения идентификатора сеанса и сохраняет его в sessionStorage
  7. при отправке запросов веб-службы приложение отправляет их на сервер приложений вместо сервера веб-служб и передает идентификатор сеанса
  8. сервер приложений проверяет идентификатор сеанса, ищет доступтокен в базе данных и передает запрос на сервер веб-сервисов, добавляя токен доступа
  9. если срок действия маркера доступа истек, сервер приложений просматривает токен обновления в базе данных и вызывает сервер OAuth, чтобы обменять его на новый токен доступа

Вводит ли я какие-либо проблемы безопасности, выполняяэто, особенно при передаче идентификатора сеанса на шагах 5-6?

Чтобы еще больше усложнить ситуацию: я бы хотел использовать Touch ID для повторной аутентификации.В этом случае я, вероятно, вернул бы другой токен вместе с идентификатором сеанса и сохранил бы его в цепочке для ключей (так как это приложение Cordova, я могу это сделать).Если он получен, его можно передать по URL-адресу на сервере приложений, который запустит новый сеанс, и использовать токен обновления для получения нового токена доступа.Этот URL-адрес не будет защищен сеансом, так как он должен работать после истечения сеанса.Если у кого-то есть мысли по поводу этого подхода, я был бы признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...