我想使用亚马逊网络服务认证作为一个OpenId连接provider.My亚马逊网络服务认证身份提供商将实习生呼叫我的另一个OpenId提供商来验证用户。然后,它将创建它的新令牌,并将其作为自己的令牌移交给调用者。
亚马逊网络服务认知池内部使用的OpenID提供商对用户是透明的。用户仅将AWS cognito配置为其IDP提供商。
用例
问题
在AWS cognito?
发布于 2018-05-05 22:40:31
Cognito确实提供了OpenId连接端点,正如@Badri在本blog post中详细介绍的那样
授权的公式是:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}
您可以通过检查元数据URL来验证其中是否存在某些内容
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration
然后,在客户端池设置期间,您可以与其他OIDC提供程序联合,还可以在应用程序客户端设置中启用OIDC提供程序。这将使您的场景听起来非常类似于我想要做的事情。然而,这篇博客文章遗漏了一个关键的配置,那就是为应用程序集成设置域名。如果您不配置此域并在答案中链接到解决方案,This StackOverflow question将显示您将收到的错误。一旦我设置了域名,Badri的代码就为我工作了。
发布于 2019-05-20 21:00:30
提供关于Cognito的OpenID连接支持的更详细的答案。
发现端点
Cognito在以下位置公开了一个OpenID连接发现端点,如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"]
域名
Cognito提供了指定域的选项,该域将作为Cognito端点的主机名的前缀。
在未指定域的情况下,Cognito将在OpenID连接发现端点(如https://cognito-idp.eu-west-2.amazonaws.com/{userPoolId}/authorize )通告通用URL,但所有尝试登录这些URL都会返回错误消息:
{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}
错误消息并没有指出请求的错误所在,因此这似乎是Cognito中的一个bug。
指定了域之后,Cognito将通告包含域前缀的URL,代码“response_type”会如期返回登录页面。
注销
https://openid.net/specs/openid-connect-session-1_0.html#RPLogout的OpenID连接会话管理介绍了如何启动OpenID连接注销,并根据https://openid.net/specs/openid-connect-session-1_0.html#OPMetadata要求在发现元数据中包含end_session_endpoint参数。
在Cognito的情况下,元数据中省略了end_session_endpoint。
RP-Initiated Logout at https://openid.net/specs/openid-connect-session-1_0.html#RPLogout描述注销端点的工作方式。如果尝试手动将注销端点传递到OpenID连接客户端实现,则注销失败,如下所示:
{"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连接不兼容。
虽然您可以使用登录到OpenID,但是没有注销的选项。
云表单
Cognito Cloudformation支持不完整,会影响OpenID连接,如下所示:
摘要
要使用Cognito访问OpenID,请确保指定了一个域,并仅使用response_type“代码”。无法注销OpenID连接。其他选项违反了OpenID连接规范,或被破坏发布。
发布于 2017-12-21 07:45:39
我在理解您的用例时遇到了一些问题,但我将解释一些可能会有所帮助的要点。
您可以使用Cognito用户池通过Google对用户进行身份验证,然后从Cognito用户池发出JWT令牌。请参阅Developer Guide。
Cognito User Pools目前还不是一个完整的OpenID身份提供者,但它在我们的路线图上。用户池确实支持OAuth2.0流,并且它们确实提供OpenID标准JWT令牌。
https://stackoverflow.com/questions/47664727
复制相似问题