Могу ли я использовать 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 или были выпущены неработающими.