Как мы могли бы использовать учетную запись GitHub в качестве поставщика удостоверений AWS Cognito?

Читая документ Cognito Identity Provider, я понимаю что похоже, что он обеспечивает встроенную интеграцию с Facebook / Google / Twitter в качестве поставщиков удостоверений.

Мое приложение ориентировано на разработчиков, поэтому я хотел бы разрешить пользователям регистрироваться / входить в систему с их учетной записью Github, помимо указанных выше учетных записей поставщика удостоверений. Это возможно?

Если возможно, сколько дополнительной работы (сравнивая стандартную функцию регистрации в социальных сетях Facebook / Google) мне нужно сделать?


person chen    schedule 06.06.2017    source источник


Ответы (2)


С момента написания этого ответа я реализовал и опубликовал проект , который предоставляет оболочку для Cognito. поговорить с GitHub. Он поставляется со сценарием развертывания SAM / cloudformation, поэтому вы можете легко создать стек CloudFormation, который предоставляет оболочку.


Итак, OpenID Connect построен поверх OAuth2.0. Это расширение - в OpenID Connect есть конечные точки OAuth (с одним или двумя расширениями или изменениями), а также некоторые новые конечные точки.

Я понял, прочитав документацию Cognito и соответствующие разделы OpenID Connect и спецификации OAuth2.0 таковы, что Cognito использует только четыре конечные точки OpenID - Авторизация, токен, userinfo и jwks. Вы можете указать каждую конечную точку отдельно при настройке поставщика OpenID Connect в Cognito. Это означает, что можно предоставить OpenID Connect для github, реализовав эти конечные точки.

Вот примерный план реализации:

  • Авторизация: в спецификации это выглядит так же, как конечная точка OAuth2.0 (плюс некоторые дополнительные параметры, которые, по моему мнению, не имеют отношения к использованию github в качестве поставщика удостоверений). Я думаю, вы могли бы:

    • Используйте github Auth URL: https://github.com/login/oauth/authorize

    • Настройте приложение GitHub OAuth для перенаправления на https://<your_cognito_domain>/oauth2/idpresponse

Для других конечных точек вам придется самостоятельно их свернуть:

  • Токен: используется для получения токенов доступа и идентификатора - с помощью code, возвращаемого обратным вызовом авторизации. Он выглядит так же, как конечная точка OAuth2.0, но также возвращает idToken. Кажется возможным создать реализацию, которая проходит через code в конечную точку токена github (https://github.com/login/oauth/access_token), чтобы получить accessToken, а затем генерирует idToken, подписанный вашим собственным закрытым ключом.

  • UserInfo: этого вообще нет в OAuth2.0, но я думаю, что большая часть содержимого может быть заполнена запросами к /user конечным точкам github (поскольку на этом этапе запрос содержит аутентифицированный access_token). Между прочим, это причина того, что нет прокладки с открытым исходным кодом для обертывания OAuth2.0 с подключением OpenID - основной вклад OpenID connect - это стандартизованный способ передачи пользовательских данных - и поскольку у OAuth нет стандартизированного способа сделать это, у нас есть чтобы написать собственный, специфичный для GitHub (или любого другого поставщика только OAuth, который мы хотели использовать для федерации).

  • JWKS: это документ набора веб-ключей JSON, содержащий открытый ключ (и), который можно использовать для проверки токенов, сгенерированных конечной точкой токена. Это может быть плоский файл.

Я реализовал все вышеизложенное, и подход работает. Я открыл исходный код проекта здесь.

person Timothy Jones    schedule 28.08.2018
comment
Это все еще единственный способ аутентификации с помощью Github? - person colemars; 12.08.2019
comment
Кажется, это другая реализация: github.com/gauravlanjekar/lambda-github-authorizer - person Simon Forsberg; 10.11.2019
comment
@SimonForsberg Эта реализация, по-видимому, предназначена для аутентификации шлюза API с лямбдой, а не OIDC для Cognito. Если я чего-то не упускаю, вы не можете использовать это для решения проблемы, указанной в вопросе. - person Timothy Jones; 28.11.2019
comment
Надо сказать, отличная библиотека. Спасибо - person Madeo; 05.12.2019

К сожалению, это невозможно. Cognito Federated Identities может поддерживать любого поставщика удостоверений OIDC, но спецификация OAuth2.0 не дает такой гибкости, поэтому нет простого способа добиться этого, если мы не добавим специальную поддержку для Github.

person patanjal    schedule 09.06.2017
comment
Кого вы имеете в виду под словом «мы», если мы не добавляем ...? Команда AWS Cognito или я разработчик? - person chen; 12.06.2017
comment
@patanjal - разработчик в AWS Cognito, согласно его профилю. Есть ли сложный способ сделать это? - person MynockSpit; 26.05.2018
comment
Этому сообщению один год. Есть ли обновление? Как вы думаете, можно ли включить логин Github в индивидуальный IDP? - person Thomas Arnaud; 27.08.2018
comment
Другой ответ здесь, кажется, указывает на то, что этот сервер неправильный. - person Simon Forsberg; 10.11.2019