AWS cognito返回 - '无效的登录令牌。不是Cognito Token'

时间:2017-05-26 16:28:37

标签: amazon-web-services authentication amazon-cognito aws-cognito

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

此令牌将返回到运行AWS JS SDK的浏览器。当我打电话给getCredentialsForIdentiy时,我收到了“无效的登录令牌”#39;错误。

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)"

我将以下参数传给getCredentialsForIdentity。

identityId: <returned from servlet in region:guid format>
customRoleArn: <that maps to authenticated role>
Logins: <cognito-identity.amazonaws.com = token returned by congito>

我注意到使用id浏览器创建了新的congnito身份。因此,与servlet的令牌交互似乎是正确的。但令牌被拒绝了。

我在这里缺少什么?我该如何进一步排除故障?

编辑: 浏览器客户端:javascript sdk,版本2.58。 基本上将JS客户端编写到this demo。修改只是将令牌作为登录调用本身的一部分。生成的令牌对应于仅具有IOT客户端访问权限的角色。 (我想知道该政策是否需要扩大)。最终,用户将通过内部ID存储而不是此演示验证。

编辑2: 我没有针对Cognito Service调用getCredentialsForIdentiy,而是针对STS调用了assumeRoleWithWebIdentity,并且有效。使用Basic Flow而不是Enhanced flow here.。真的不确定为什么增强流程不起作用,但现在将采用基本流程方法。

1 个答案:

答案 0 :(得分:3)

因此,AWS文档here要么不准确,要么记录效率低下的情况。

使用JavaScript Cognito API,我的Developer Provider返回的令牌无法与GetCredentialsForIdentity一起用于Cognito API。 (这就是促使我提出这个问题的原因)。

但是,我可以对STS API使用相同的标记并调用AssumeRoleWithWebIdentity,它基本上返回与上面的GetCredentialsForIdentity相同的响应参数。这是我采取的方法。

第一个链接中的基本Auth Flow文档似乎不准确。因为它列出了“获取凭据”#39;和&#39;承担角色&#39;作为必需的步骤,但实际上只需要一个步骤。此外,从浏览器,这是对亚马逊服务的API调用。因此,如果使用Enhanced Flow而不是Basic,那么它似乎不是一个优势。

相关问题