Я использую Node.js для реализации API, но ответ, вероятно, можно ответить не зависящим от языка образом.
Учитывая URL потока авторизации, который выглядит следующим образом:
https://auth.example.com/oauth/authorize?client_id=client_id&redirect_uri=callback_url&response_type=response_type&state=nonce
Я хотел бы выполнить этот поток через API.
- Пользователь перенаправлен из приложения (например, собственного мобильного или веб-спа) на конечную точку API
/{third_party_oauth_privder}/token
(этоAPI построен мной) - Перенаправление с первого шага поставляется вместе с токеном-носителем для доступа к API, который я создаю (предоставляя, помимо прочего, личность пользователя).
- Мне нужно перенаправить пользователя через URL-адрес авторизации, аналогичный приведенному выше, и после того, как пользователь нажмет «разрешить» после аутентификации у поставщика oauth третьей части, пользователь будет перенаправлен обратно к конечной точке в API-интерфейсе, который я создаю.На этом этапе мне нужно иметь возможность связать контекст авторизации (токен и разрешенные данные пользователя третьей части) с пользователем в моей системе. Я хотел бы сделать это без использования состояния с точки зрения API.
Библиотеки, подобные паспорту, похоже, делают это с состоянием сеанса, но я не хочу сеанс вAPI (даже только для этого варианта использования).Я мог бы использовать одноразовый номер, записав его вместе с информацией о профиле пользователя в моей системе и просмотрев одноразовый номер в параметре состояния обратного вызова, чтобы найти ассоциированного пользователя без сохранения какого-либо состояния в API ... но это кажется странным.
Что такое oauth-совместимый способ справиться с этим сценарием?Действительно ли мне нужно поддерживать состояние сеанса только для этого потока, чтобы эта работа работала?Если так, то как бы этот масштаб?Нужно ли сохранять это состояние сеанса в Redis, чтобы гарантировать, что экземпляр API обратного вызова будет иметь это состояние сеанса?Должно быть достаточно элегантное решение, которое не требует состояния: / или, возможно, нет.
Будем весьма благодарны за любые предложения / примеры / ссылки / и т. Д.