首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我能否使用AWS cognito来提供开放的id连接端点?

我能否使用AWS cognito来提供开放的id连接端点?
EN

Stack Overflow用户
提问于 2017-12-06 08:07:10
回答 3查看 15.1K关注 0票数 27

我想使用亚马逊网络服务认证作为一个OpenId连接provider.My亚马逊网络服务认证身份提供商将实习生呼叫我的另一个OpenId提供商来验证用户。然后,它将创建它的新令牌,并将其作为自己的令牌移交给调用者。

亚马逊网络服务认知池内部使用的OpenID提供商对用户是透明的。用户仅将AWS cognito配置为其IDP提供商。

用例

  • 用户向我的AWS提供商进行身份验证
  • 我的IDP提供商再次验证用户Googles IDP提供商
  • 我的IDP解码由谷歌IDP返回的令牌。
  • 我的IDP创建新令牌并添加其他声明。
  • 我的IDP将JWT移交给用户。

问题

在AWS cognito?

  • Does AWS用户池中,
  • 是否可能暴露OpenID连接端点?
EN

回答 3

Stack Overflow用户

发布于 2018-05-05 22:40:31

Cognito确实提供了OpenId连接端点,正如@Badri在本blog post中详细介绍的那样

授权的公式是:

代码语言:javascript
复制
https://cognito-idp.{region}.amazonaws.com/{userPoolId}

您可以通过检查元数据URL来验证其中是否存在某些内容

代码语言:javascript
复制
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration

然后,在客户端池设置期间,您可以与其他OIDC提供程序联合,还可以在应用程序客户端设置中启用OIDC提供程序。这将使您的场景听起来非常类似于我想要做的事情。然而,这篇博客文章遗漏了一个关键的配置,那就是为应用程序集成设置域名。如果您不配置此域并在答案中链接到解决方案,This StackOverflow question将显示您将收到的错误。一旦我设置了域名,Badri的代码就为我工作了。

票数 24
EN

Stack Overflow用户

发布于 2019-05-20 21:00:30

提供关于Cognito的OpenID连接支持的更详细的答案。

发现端点

Cognito在以下位置公开了一个OpenID连接发现端点,如https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest所述:

代码语言:javascript
复制
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/openid-configuration

响应类型

上述端点返回以下三个response_types:

代码语言:javascript
复制
"response_types_supported":["code","token","token id_token"]

  • token id_token:该值触发重定向到错误页面,代码为"invalid_request“。对于请求的无效之处,没有给出任何指示。亚马逊网络服务技术支持声称,授权端点只支持“response_type”和"token“,但是,如果不支持,则不清楚为什么要通告此代码。

域名

Cognito提供了指定域的选项,该域将作为Cognito端点的主机名的前缀。

在未指定域的情况下,Cognito将在OpenID连接发现端点(如https://cognito-idp.eu-west-2.amazonaws.com/{userPoolId}/authorize )通告通用URL,但所有尝试登录这些URL都会返回错误消息:

代码语言:javascript
复制
{"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连接客户端实现,则注销失败,如下所示:

代码语言:javascript
复制
{"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连接,如下所示:

  • 无法使用CloudFormation指定域,而该域是OpenID连接工作所必需的。
  • OpenID连接需要回调URL,但无法使用Cloudformation设置回调URL

摘要

要使用Cognito访问OpenID,请确保指定了一个域,并仅使用response_type“代码”。无法注销OpenID连接。其他选项违反了OpenID连接规范,或被破坏发布。

票数 12
EN

Stack Overflow用户

发布于 2017-12-21 07:45:39

我在理解您的用例时遇到了一些问题,但我将解释一些可能会有所帮助的要点。

您可以使用Cognito用户池通过Google对用户进行身份验证,然后从Cognito用户池发出JWT令牌。请参阅Developer Guide

Cognito User Pools目前还不是一个完整的OpenID身份提供者,但它在我们的路线图上。用户池确实支持OAuth2.0流,并且它们确实提供OpenID标准JWT令牌。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47664727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档