Amazon web services AWS cognito返回-';无效的登录令牌。不是Cognito代币';

Amazon web services AWS cognito返回-';无效的登录令牌。不是Cognito代币';,amazon-web-services,authentication,amazon-cognito,aws-cognito,Amazon Web Services,Authentication,Amazon Cognito,Aws Cognito,我能够成功检索自定义身份验证提供程序(开发人员身份验证)的身份令牌。这是使用Cognito devauth演示servlet实现的 此令牌返回到运行AWS JS SDK的浏览器。当我调用GetCredentialsForIdentity时,我收到“无效登录令牌”错误 POST https://cognito-identity.us-west-2.amazonaws.com/ 400 (Bad Request) app.js:150 Error: Invalid login token. Not

我能够成功检索自定义身份验证提供程序(开发人员身份验证)的身份令牌。这是使用Cognito devauth演示servlet实现的

此令牌返回到运行AWS JS SDK的浏览器。当我调用GetCredentialsForIdentity时,我收到“无效登录令牌”错误

POST https://cognito-identity.us-west-2.amazonaws.com/ 400 (Bad Request)
app.js:150 Error: Invalid login token. Not a Cognito token.
    at constructor.a (aws-sdk-2.58.0.min.js:41)
    at constructor.callListeners (aws-sdk-2.58.0.min.js:41)
    at constructor.emit (aws-sdk-2.58.0.min.js:41)
    at constructor.emitEvent (aws-sdk-2.58.0.min.js:41)
    at constructor.e (aws-sdk-2.58.0.min.js:41)
    at i.runTo (aws-sdk-2.58.0.min.js:43)
    at aws-sdk-2.58.0.min.js:43
    at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
    at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
    at constructor.callListeners (aws-sdk-2.58.0.min.js:41) "NotAuthorizedException: Invalid login token. Not a Cognito token.
    at constructor.a (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:615)
    at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30513)
    at constructor.emit (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30224)
    at constructor.emitEvent (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16590)
    at constructor.e (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12285)
    at i.runTo (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7277)
    at https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7482
    at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12495)
    at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16645)
    at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30619)"
POSThttps://cognito-identity.us-west-2.amazonaws.com/ 400(错误请求)
app.js:150错误:登录令牌无效。不是Cognito代币。
在constructor.a(aws-sdk-2.58.0.min.js:41)
位于constructor.callListeners(aws-sdk-2.58.0.min.js:41)
在constructor.emit(aws-sdk-2.58.0.min.js:41)
在constructor.emitEvent(aws-sdk-2.58.0.min.js:41)
在constructor.e(aws-sdk-2.58.0.min.js:41)
在i.runTo(aws-sdk-2.58.0.min.js:43)
在aws-sdk-2.58.0.min.js:43
在建造商处。修改只是为了作为登录调用本身的一部分获取令牌。生成的令牌对应于仅具有IOT客户端访问权限的角色。(我想知道这项政策是否需要扩大)。最终,用户将根据内部ID存储而不是本演示进行验证

编辑2: 我没有针对Cognito服务调用GetCredentialsForIdentity,而是针对STS调用了assumeRoleWithWebIdentity,这很有效。使用基本流而不是增强流。我真的不知道为什么增强流不起作用,但现在将采用基本流方法

因此,AWS文档要么不准确,要么记录了一个低效的场景

使用JavaScript Cognito API时,我的开发人员提供程序返回的令牌不能用于对抗Cognito API。(这就是促使我提出这个问题的原因)

但是,我可以对STS API和invoke使用相同的令牌,它本质上返回与上面GetCredentialsForIdentity相同的响应参数。这就是我采取的方法


第一个链接中的基本身份验证流文档似乎不准确。因为它列出了“获取凭据”和“承担角色”作为必需步骤,但实际上只需要一个步骤。此外,在浏览器中,这是对Amazon服务的API调用。因此,如果使用增强的流而不是基本流有效的话,它似乎不是一个优势。

您使用的是哪种SDK?你能详细介绍一下你是如何管理这个流程的吗?你所描述的听起来不错,所以应该是一些小事情。谢谢!添加了更多细节。我同意Aws关于Cognito的文档令人震惊。不得不切换到这个设置,谢谢提示。
identityId: <returned from servlet in region:guid format>
customRoleArn: <that maps to authenticated role>
Logins: <cognito-identity.amazonaws.com = token returned by congito>