use*_*796 19 oauth openid-connect amazon-cognito
我想将AWS cognito用作OpenId连接提供者.我的AWS cognito IDP将实习调用我的另一个OpenId提供程序来验证用户身份.然后它将创建其新令牌并将其作为自己的代码移交给调用者.
AWS cognito池内部使用的OpenID提供程序对用户是透明的.用户仅将AWS cognito配置为其IDP提供者.
用户案例
题
Jim*_*nts 15
Cognito的确提供了ID连接端点,如在此详述博客文章由@Badri
权威的公式是:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}
Run Code Online (Sandbox Code Playgroud)
您可以通过检查元数据URL来验证存在的内容
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration
Run Code Online (Sandbox Code Playgroud)
然后,在客户端池设置期间,您可以与其他OIDC提供程序联合,并在应用程序客户端设置中启用OIDC提供程序.哪个应该使您的场景听起来与我想要做的非常相似.但是,博客文章遗漏了一个关键的配置,即为应用程序集成设置域名. 如果您没有配置此域并在答案中链接到解决方案,则此StackOverflow问题会显示您将收到的错误.一旦我设置域名,Badri的代码就适合我.
Gra*_*ett 11
提供有关 Cognito 的 OpenID Connect 支持的更详细答案。
Cognito在以下位置公开 OpenID Connect Discovery 端点,如https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest所述:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration
Run Code Online (Sandbox Code Playgroud)
上述端点返回以下三个 response_types:
"response_types_supported":["code","token","token id_token"]
Run Code Online (Sandbox Code Playgroud)
代码:在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 将在 OpenID Connect 发现端点公布通用 URL,例如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"}
Run Code Online (Sandbox Code Playgroud)
错误消息并没有表明请求有什么问题,所以这似乎是 Cognito 中的一个错误。
指定域后,Cognito 将公布包含域前缀的 URL,并且 response_type“代码”按预期返回登录页面。
https://openid.net/specs/openid-connect-session-1_0.html#RPLogout 上的OpenID Connect 会话管理描述了必须如何启动 OpenID Connect 注销,并要求按照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 Connect 客户端实现,注销将失败,如下所示:
{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}
Run Code Online (Sandbox Code Playgroud)
同样,错误消息没有给出错误指示,但是https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html上的注销端点描述显示与 OpenID Connect 不兼容。
虽然您可以使用 OpenID Connect 登录 Cognito,但没有退出选项。
Cognito Cloudformation 支持不完整,对 OpenID Connect 的影响如下:
要使用 OpenID Connect 访问 Cognito,请确保指定了域,并且仅使用 response_type “code”。OpenID Connect 注销是不可能的。其他选项违反 OpenID Connect 规范,或者被发布破坏。
归档时间: |
|
查看次数: |
6228 次 |
最近记录: |