Вопрос или проблема
ИЗМЕНЕНИЕ: Я более подробно изучил проблему и нашел документацию для получения OAuth токена с использованием OpenID Connect, но не с OpenID 2.0. Это возможно?
У нас есть серверное приложение, которое возвращает наши OAuth токены с помощью библиотеки Python Authlib.
Мы принимаем oauth:grant-type:token-exchange
для приема токенов от других провайдеров, чтобы позволить связывать аккаунты и входить с помощью токена провайдера.
Теперь нам нужно реализовать интеграцию с другим третьим лицом, которое предоставляет только OpenID 2.0. Не с более поздним OpenID Connect, а с устаревшим OpenID 2.0.
Мы не можем использовать OAuth напрямую для связывания аккаунтов с этим провайдером.
Найти какую-либо информацию по этому вопросу очень трудно, так как большинство поисковых запросов возвращают результаты по использованию OpenID Connect с OAuth 2.0.
Я реализовал несколько HTTP вызовов для перенаправления пользователя на сайт провайдера для входа, а затем проверки его OpenID учетных данных с помощью серверного вызова с openid.mode: check_authentication
.
Я задаюсь вопросом, как сгенерировать наш собственный OAuth токен, используя это.
Какова будет наилучшая отправная точка? Попытаться преобразовать данные OpenID 2.0 в данные OpenID Connect. Сгенерировать токен вручную без использования библиотеки? Есть ли какой-то тип гранта для этого? Это может быть сделано?
После некоторых поисков на Википедии я нашел следующее:
«Окончательная версия OpenID – это OpenID 2.0, завершенная и опубликованная в декабре 2007 года.»
«Протокол OAuth 1.0 был опубликован […] в апреле 2010 года.»
«OAuth 2.0 был опубликован […] в октябре 2012 года.»
«Опубликованный в феврале 2014 года Фондом OpenID, OpenID Connect […]»
Таким образом, по сути, OpenID 2.0 был опубликован до OAuth 1.0, что объясняет, почему я не могу найти способ поддерживать OAuth в OpenID 2.0.
Ответ или решение
Вопрос: Как использовать OpenID 2.0 для получения OAuth токена?
Ответ:
Ситуация, с которой вы столкнулись, является довольно распространенной, поскольку OpenID 2.0 и OAuth 2.0 были разработаны независимо друг от друга, и OpenID 2.0 не включает встроенной поддержки OAuth. Несмотря на это, вы можете реализовать решение для того, чтобы интегрировать систему на базе OpenID 2.0 с вашим сервером OAuth. Давайте разберем шаги, которые вам необходимо предпринять.
Шаг 1: Аутентификация пользователя через OpenID 2.0
-
Перенаправление пользователя: Вы уже реализовали перенаправление пользователя на сайт третьей стороны для аутентификации через OpenID 2.0. Убедитесь, что вы корректно обрабатываете параметры запроса, такие как
openid.return_to
, чтобы пользователю было возвращено на ваш сайт после успешной аутентификации. -
Проверка аутентификации: После того как пользователь успешно зайдет в систему через OpenID, вы будете получать данные с помощью вызова API с использованием
openid.mode: check_authentication
. Проверьте, что вы правильно извлекаете и храните информацию о пользователе, такую какopenid.claimed_id
и другие идентификаторы.
Шаг 2: Генерация OAuth токена
После того, как пользователь прошел аутентификацию, вам необходимо создать OAuth токен на основе полученных данных OpenID 2.0. Вам следует рассмотреть следующие шаги:
-
Создание OAuth токена: Для генерации токена вы можете использовать собственную логику или библиотеку, чтобы создать новый токен, связывая его с уникальными идентификаторами пользователя. Например, вы можете генерировать JWT (JSON Web Token), который будет включать информацию о пользователе, полученную через OpenID.
-
Связывание токена с пользователем: Важно, чтобы созданный OAuth токен было легко связать с учетной записью пользователя в вашей системе. Храните соответствия между OpenID и вашим внутренним хранилищем учетных записей, чтобы вы могли в дальнейшем проверять или аннулировать доступ.
Шаг 3: Реализация Grant Type
Так как OpenID 2.0 не поддерживает стандартные механизмы Grant Type для OAuth, вам, вероятно, придется использовать кастомный подход. Вы можете:
-
Реализовать специальный Grant Type: Например, вы можете создать специальный «OpenID Token Exchange» grant type. При этом ваш сервер должен будет обрабатывать запросы на получение токена, принимая OpenID данные и выдавая соответствующий OAuth токен.
-
Документация и соглашения: Убедитесь, что вы документируете новый подход и соглашения, чтобы другие разработчики в вашей команде могли понять и поддерживать его.
Заключение
Создание OAuth токена из OpenID 2.0 — это процесс, который требует работы по интеграции, поскольку стандартных механизмов для этого нет. Однако, следуя вышеописанным шагам, вы сможете реализовать функциональность для вашей системы. Вам может понадобиться экспериментировать с форматами токенов и методами связи, чтобы обеспечить безопасность и удобство для пользователей. Убедитесь, что вся реализация соответствует лучшим практикам безопасности.
Надеюсь, что этот ответ поможет вам решить вашу проблему. Если у вас будут дополнительные вопросы, не стесняйтесь спрашивать!