无效的登录令牌。缺少必需的声明:访问 AWS Cognito AssumeRoleWithWebIdentity 时的 aud

Posted

技术标签:

【中文标题】无效的登录令牌。缺少必需的声明:访问 AWS Cognito AssumeRoleWithWebIdentity 时的 aud【英文标题】:Invalid login token. Missing a required claim: aud when accessing AWS Cognito AssumeRoleWithWebIdentity 【发布时间】:2018-09-12 09:41:33 【问题描述】:

我已经在 Cognito 中设置了用户池,并在通过 cognito js sdk 对创建的用户进行身份验证后获得了 JWT 令牌。当我尝试调用assumeRoleWithWebIdentity api时,它返回一个错误,下面是示例api调用。

https://sts.amazonaws.com/
?Action=AssumeRoleWithWebIdentity
&DurationSeconds=3600
&RoleSessionName=app1
&RoleArn=arn:aws:iam::id:role/_cross_account_role
&WebIdentityToken=jwtAccessToken
&Version=2011-06-15

api 响应,

<ErrorResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<Error>
<Type>Sender</Type>
<Code>InvalidIdentityToken</Code>
<Message>Missing a required claim: aud</Message>
</Error>
<RequestId>c01780d7-3705-11e8-80ef-533aa2d4f58f</RequestId>
</ErrorResponse>

如果我能知道这个问题的根本原因,那就太好了。

【问题讨论】:

【参考方案1】:

当用户通过身份验证时,它会提供访问令牌和 ID 令牌。

当您尝试使用访问令牌而不是 ID 令牌时会出现此问题。

【讨论】:

我不明白。我正在尝试访问后端 API。我们永远不应该使用 idToken 来访问 API 服务... :( auth0.com/docs/api-auth/why-use-access-tokens-to-secure-apis 我也不明白,但它也解决了我的问题(在我的环境中使用 django-cognito-jwt)【参考方案2】:

为了进一步详细说明 Nirojan 的答案,这是因为在idToken 的有效负载中具有aud 字段,而accessToken 在有效负载中没有aud,因此错误要求丢失:@ 987654325@.

【讨论】:

以上是关于无效的登录令牌。缺少必需的声明:访问 AWS Cognito AssumeRoleWithWebIdentity 时的 aud的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌

如果我有登录用户的访问令牌,如何使用 AWS Amplify GraphQL API?

颤动中的Facebook登录错误:访问令牌错误:“code”:190,“message”:“无效的OAuth访问令牌。”],null)

如何让我的 Auth0 权限进入 AWS HTTP API Jwt 授权方的访问令牌的范围声明?

使用 Firebase 登录 Facebook 导致无效 OAuth 访问令牌错误

iOS:代码签名无效/缺少必需的代码签名