Насколько я понимаю, токены доступа OAuth2 не предназначены для использования в качестве идентификаторов сеансов.
У меня есть одностраничное приложение JavaScript (в приложении Cordova).Он использует OAuth2 для получения доступа к некоторым веб-сервисам.Но Я хотел бы начать сеанс одновременно с тем, что пользователь авторизует с помощью OAuth, чтобы я мог реализовать истечение срока сеанса и выход из него.
В этом случае будет лицелесообразно сделать следующее?
- запросы прокси к веб-службам через веб-сервер для конкретного приложения, защищенный сессией
- использовать поток кода авторизации (вместо неявного потока), который работает с веб-серверами и позволяет токенам обновления
- сохранять токены доступа / обновления на сервере приложений и добавлять их при передаче запросов веб-службам?
Я думаю что-то вроде этого.Это в значительной степени стандартный поток кода авторизации, но с шагами 5-9, введенными для обработки сеанса.
- приложение загружает URL авторизации OAuth в отдельном окне
- пользователь вводит учетные данные
- перенаправляет URL-адрес, вызывает сервер приложений и отправляет туда код авторизации
- сервер приложений обменивает код авторизации на токены доступа / обновления и сохраняет их в базе данных
- запускается сервер приложенийсеанс и возвращает идентификатор сеанса в виде переменной JavaScript в ответе
- приложение использует межоконный обмен данными (например, postMessage) для получения идентификатора сеанса и сохраняет его в sessionStorage
- при отправке запросов веб-службы приложение отправляет их на сервер приложений вместо сервера веб-служб и передает идентификатор сеанса
- сервер приложений проверяет идентификатор сеанса, ищет доступтокен в базе данных и передает запрос на сервер веб-сервисов, добавляя токен доступа
- если срок действия маркера доступа истек, сервер приложений просматривает токен обновления в базе данных и вызывает сервер OAuth, чтобы обменять его на новый токен доступа
Вводит ли я какие-либо проблемы безопасности, выполняяэто, особенно при передаче идентификатора сеанса на шагах 5-6?
Чтобы еще больше усложнить ситуацию: я бы хотел использовать Touch ID для повторной аутентификации.В этом случае я, вероятно, вернул бы другой токен вместе с идентификатором сеанса и сохранил бы его в цепочке для ключей (так как это приложение Cordova, я могу это сделать).Если он получен, его можно передать по URL-адресу на сервере приложений, который запустит новый сеанс, и использовать токен обновления для получения нового токена доступа.Этот URL-адрес не будет защищен сеансом, так как он должен работать после истечения сеанса.Если у кого-то есть мысли по поводу этого подхода, я был бы признателен.