Могу ли я использовать AWS cognito для предоставления открытой конечной точки id?

Я хочу использовать AWS cognito в качестве провайдера подключения OpenId. Мой AWS cognito IDP будет интернировать вызов моего другого поставщика OpenId для аутентификации пользователя. Затем он создаст свой новый токен и передаст его вызывающим.

Поставщик OpenID, используемый внутренне с помощью AWS cognito pool, прозрачен для пользователя. Пользователь только настраивает AWS cognito как своего провайдера IDP.

Случай пользователя

  • Пользователь аутентифицируется поставщиком My AWS IDP
  • Мой провайдер IDP аутентифицирует пользователя снова с помощью провайдера IDP Googles
  • Мой IDP расшифровывает токен, возвращенный IDP Google.
  • Мой IDP Создает новый токен и добавляет дополнительные требования.
  • Мой IDP передает мой JWT пользователю.

Вопрос

  • Возможно ли это в AWS cognito?
  • Удаляет ли пул пользователей AWS конечную точку соединения OpenID?

Ответ 1

Cognito предоставляет конечную точку подключения OpenId, как описано в этом сообщении в блоге @Badri

Формула для власти:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}

И вы можете проверить, проверив URL-адрес метаданных, что-то есть

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration

Затем во время настройки пула клиентов вы можете объединиться с другими поставщиками OIDC, а также включить поставщика OIDC в настройках клиента приложения. Что должно включить ваш сценарий, который звучит очень похоже на то, что я хотел бы сделать. Тем не менее, в блоге пропускается одна важная часть конфигурации, которая задает доменное имя для интеграции приложения. fooobar.com/questions/26655/... показывает ошибку, которую вы получите, если вы не настроите этот домен, и в ответе ссылается на решение. Как только я установил домен, код Бадри работал на меня.

Ответ 2

У меня небольшие проблемы после вашего использования, но я объясню некоторые моменты, которые могут помочь.

Вы можете использовать пулы пользователей Cognito для аутентификации пользователей через Google, а затем выдавать токены JWT из пула пользователей Cognito. См. Руководство разработчика.

Cognito User Pools в настоящее время не является полным провайдером идентификации OpenID, но это наш план. Пулы пользователей поддерживают потоки OAuth2.0, и они предоставляют маркеры OpenID стандарта JWT.

Ответ 3

Чтобы дать более подробный ответ о поддержке Cognito OpenID Connect.

Конечная точка обнаружения

Cognito предоставляет конечную точку обнаружения OpenID Connect, как описано на странице https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest в следующем расположении:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration

Типы ответов

Вышеупомянутая конечная точка возвращает следующие три response_types:

"response_types_supported":["code","token","token id_token"]
  • код: определен в https://tools.ietf.org/html/rfc6749#section-11.3.2 - это работало для нас, но только когда домен был указан, как показано ниже.

  • токен: это значение запрещено OpenID Connect по адресу https://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest - "ПРИМЕЧАНИЕ. Хотя OAuth 2.0 также определяет значение типа ответа токена для неявного потока, OpenID Connect не использует этот тип ответа, так как идентификатор ID не будет возвращен. " - библиотеки OpenID Connect будут игнорировать этот ответ.

  • token id_token: это значение вызывает перенаправление на страницу ошибки с кодом "invalid_request". Нет никаких указаний относительно того, что является недействительным с запросом. Техническая поддержка AWS утверждает, что конечная точка авторизации поддерживает только "код" и "токен", однако неясно, почему этот response_type объявляется, если не поддерживается.

Домен

Cognito дает возможность указать домен, который будет иметь префикс имени хоста конечной точки Cognito.

Без указания домена Cognito будет рекламировать общие URL-адреса в конечной точке обнаружения OpenID Connect, такие как https://cognito-idp.eu-west-2.amazonaws.com/ {userPoolId}/authorize, но все попытки входа в систему выполняются с эти URL возвращают сообщение об ошибке:

{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}

Сообщение об ошибке не указывает на то, что плохо в запросе, поэтому это похоже на ошибку в Cognito.

С указанным доменом Cognito будет рекламировать URL-адреса, содержащие префикс домена, а "код" response_type возвращает страницу входа в систему, как и ожидалось.

Выйти

Управление сеансами OpenID Connect по адресу https://openid.net/specs/openid-connect-session-1_0.html#RPLogout описывает, как должен быть инициирован выход из OpenID Connect, и требует в соответствии с https://openid.net/specs/. openid-connect-session-1_0.html # OPMetadata, чтобы параметр end_session_endpoint был включен в метаданные обнаружения.

В случае Cognito end_session_endpoint опускается в метаданных.

Выход из системы по инициативе RP по адресу https://openid.net/specs/openid-connect-session-1_0.html#RPLogout описывает работу конечной точки выхода из системы. Если предпринята попытка передать конечную точку выхода вручную в реализацию клиента OpenID Connect, произойдет сбой выхода из системы следующим образом:

{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}

Опять же, сообщение об ошибке не указывает на ошибку, однако описание конечной точки выхода из системы по адресу https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html не показывает совместимость с OpenID Connect.

Хотя вы можете войти в Cognito с помощью OpenID Connect, нет возможности выйти из системы.

CloudFormation

Поддержка Cognito Cloudformation является неполной и влияет на OpenID Connect следующим образом:

  • Нет способа указать домен с помощью Cloudformation, и домен необходим для работы OpenID Connect.
  • URL обратного вызова требуется OpenID Connect, но его нельзя установить с помощью Cloudformation.

Резюме

Чтобы получить доступ к Cognito с помощью OpenID Connect, убедитесь, что указан домен, и используйте только "код" response_type. Выход из OpenID Connect невозможен. Другие параметры нарушают спецификацию OpenID Connect или были выпущены неработающими.