【问题标题】:AWS cognito: "Access token does not contain openid scope"AWS cognito:“访问令牌不包含 openid 范围”
【发布时间】:2020-04-25 22:35:42
【问题描述】:

我在尝试从 AWS Cognito 获取用户属性时遇到了这个问题。

我不知道它怎么会是“无效令牌”,因为我已经复制并粘贴了它,而且我已经确定它是 accessToken 而不是 idToken 或其他任何东西。

这个网站上还有一些其他类似的问题,但它们没有解决我的问题:

"Access token does not contain openid scope" in AWS Cognito

Access token does not have the openid scope

更新:这里是我的应用客户端配置

【问题讨论】:

  • 你能在 jwt.io 中输入令牌并告诉我们它包含哪些范围吗?
  • 大家好,您能帮忙在 Cognito 中显示应用程序客户端设置并确保检查了 openid 吗?
  • @PhanViệt 你说得对,我忘了检查应用程序客户端配置中的openid,但检查选项后我仍然收到相同的消息
  • @LêQuangBảo 请帮助检查我的答案并给我任何问题,因为我确信它有效。

标签: oauth-2.0 amazon-cognito


【解决方案1】:

好的,我知道了。

简答:您必须使用 oauth2 Cognito 身份验证,而不是使用 SDK 中默认的 Cognito 身份验证 API。

让我解释一下您遇到错误的原因:您正在使用 Cognito 身份验证,然后 Cognito 向您返回一个不包含“openid”范围的“访问令牌”,您可以将令牌粘贴到此处检查:https://jwt.io/#encoded-jwt

您必须使用 oauth2 身份验证来获取包含“openid”的“访问令牌”。为此,您必须使用 Hosted UI 或 AUTHORIZATION Endpoint 来获取“访问令牌”。

您可以通过访问链接尝试托管 UI(请编辑您的域 + response_type + client_id + redirect_uri):https://tsunami.auth.us-east-2.amazoncognito.com/login?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_SIGNIN_URL

您可以使用 AUTHORIZATION 端点:https://tsunami.auth.us-east-2.amazoncognito.com/oauth2/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_SIGNIN_URL&identity_provider=COGNITO,它将重定向到托管 UI

【讨论】:

  • 我在使用授权端点时遇到了redirect_mismatch 错误。这是我的网址:tsunami.auth.us-east-2.amazoncognito.com/oauth2/…
  • @LêQuangBảo 作为您的屏幕截图,客户端 ID 应该是“522j...”,而不是“jb6hkb09vv90b48bbpe85p11t”。所以重定向 uri:"localhost:4200/pages/dashboard" 不匹配。请帮助检查您构建的 url 是否与应用程序客户端设置匹配。
  • 我正在使用自定义 UI 而不是托管 UI 和来自 aws amplify 的 Auth api。返回的访问令牌没有 openid 范围。它可以修复吗?或我们不使用托管 UI 时的期望行为
【解决方案2】:

获取用户信息是一种开放 id 连接功能,需要令牌中的 openid 范围。

我怀疑问题出在您进行身份验证并获取令牌时未指定此范围。

通常您在进行身份验证时配置如下范围:

  • openid 个人资料电子邮件

您还可以在 Cognito 中配置的 OAuth 客户端信任条目中提供这些信息

  • 配置文件范围使您能够从用户信息端点获取用户名
  • 电子邮件范围使您能够从用户信息端点获取电子邮件

请参阅step 9 of my write up 了解示例

【讨论】:

  • 它还取决于您用于获取令牌的库。从上一篇文章中,我似乎记得某些 AWS 特定库不允许您在身份验证时指定范围。如果是这样,我会放弃它们并转向基于标准的库。
  • 我通过amazon-cognito-identity-js 获取令牌,如何在我的身份验证请求中指定范围?
  • @LêQuangBảo 使用托管 UI 或 AUTHORIZATION Endpoint 到 OAuth2,并使用 Cognito 用户池作为 Provder 请求范围。
猜你喜欢
  • 2023-03-23
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2023-04-03
  • 1970-01-01
  • 2021-12-21
  • 2020-09-28
相关资源
最近更新 更多