Использование OpenID 2.0 для возврата токена Oauth

Вопрос или проблема

ИЗМЕНЕНИЕ: Я более подробно изучил проблему и нашел документацию для получения 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

  1. Перенаправление пользователя: Вы уже реализовали перенаправление пользователя на сайт третьей стороны для аутентификации через OpenID 2.0. Убедитесь, что вы корректно обрабатываете параметры запроса, такие как openid.return_to, чтобы пользователю было возвращено на ваш сайт после успешной аутентификации.

  2. Проверка аутентификации: После того как пользователь успешно зайдет в систему через OpenID, вы будете получать данные с помощью вызова API с использованием openid.mode: check_authentication. Проверьте, что вы правильно извлекаете и храните информацию о пользователе, такую как openid.claimed_id и другие идентификаторы.

Шаг 2: Генерация OAuth токена

После того, как пользователь прошел аутентификацию, вам необходимо создать OAuth токен на основе полученных данных OpenID 2.0. Вам следует рассмотреть следующие шаги:

  1. Создание OAuth токена: Для генерации токена вы можете использовать собственную логику или библиотеку, чтобы создать новый токен, связывая его с уникальными идентификаторами пользователя. Например, вы можете генерировать JWT (JSON Web Token), который будет включать информацию о пользователе, полученную через OpenID.

  2. Связывание токена с пользователем: Важно, чтобы созданный OAuth токен было легко связать с учетной записью пользователя в вашей системе. Храните соответствия между OpenID и вашим внутренним хранилищем учетных записей, чтобы вы могли в дальнейшем проверять или аннулировать доступ.

Шаг 3: Реализация Grant Type

Так как OpenID 2.0 не поддерживает стандартные механизмы Grant Type для OAuth, вам, вероятно, придется использовать кастомный подход. Вы можете:

  1. Реализовать специальный Grant Type: Например, вы можете создать специальный «OpenID Token Exchange» grant type. При этом ваш сервер должен будет обрабатывать запросы на получение токена, принимая OpenID данные и выдавая соответствующий OAuth токен.

  2. Документация и соглашения: Убедитесь, что вы документируете новый подход и соглашения, чтобы другие разработчики в вашей команде могли понять и поддерживать его.

Заключение

Создание OAuth токена из OpenID 2.0 — это процесс, который требует работы по интеграции, поскольку стандартных механизмов для этого нет. Однако, следуя вышеописанным шагам, вы сможете реализовать функциональность для вашей системы. Вам может понадобиться экспериментировать с форматами токенов и методами связи, чтобы обеспечить безопасность и удобство для пользователей. Убедитесь, что вся реализация соответствует лучшим практикам безопасности.

Надеюсь, что этот ответ поможет вам решить вашу проблему. Если у вас будут дополнительные вопросы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...