AWS Cognito getId“登录令牌无效。颁发者与提供者名称不匹配”

use*_*708 5 amazon-cognito

我已经使用 API“InitiateAuth”针对 Cognito 用户池进行了身份验证,并收到了一个 id 令牌:

{
   sub: "8aec..." ,
   aud:"2gr0fdlr647skqqghtau04vuct",
   iss:"https://cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q",
   ....
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过 API“GetId”获取 ID:

{
   AccountId: "345745834314"
   IdentityPoolId: "us-east-1:fb4d5209-33b1-46e2-923a-8aa206d5c7aa"
   Logins: {
      "cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q": "eyJr...." 
   }
}
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个身份池,并正确地将 Cognito 用户池设置为提供者。但我总是得到响应表 getId:

“登录令牌无效。颁发者与提供者名称不匹配”

我还尝试将登录列表中的提供者名称更改为:

https://cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q

因此它与令牌在 iss 字段中的内容完全匹配,但这并不能解决问题,仍然是关于发行者与提供者名称不匹配的相同消息。

知道我在这里做错了什么吗?

use*_*708 6

好吧,弄清楚了,实际上提供商名称周围有一组额外的引号:“cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q”

在开发者控制台中显示:

{
   AccountId: "345745834314"
   IdentityPoolId: "us-east-1:fb4d5209-33b1-46e2-923a-8aa206d5c7aa"
   Logins: {
      "cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q": "eyJr...." 
   }
Run Code Online (Sandbox Code Playgroud)

}

其中只有提供商名称周围有引号,没有其他字段,这让我感到怀疑。我点击“查看源代码”查看发送的实际 json,如下所示:

"\"cognito-idp.us-east-1.amazonaws.com/us-east-1_LzM42GX6Q\""
Run Code Online (Sandbox Code Playgroud)

我删除了多余的引号并且它有效。