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

Invalid login token. Missing a required claim: aud when accessing AWS Cognito AssumeRoleWithWebIdentity

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

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

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

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

为了进一步详细说明 Nirojan 的回答,这是因为在 idToken 的有效载荷中有 aud 的字段,而在 accessToken 中没有 aud payload 因此 Missing required 错误声明:aud.