我能够成功检索我的自定义身份验证提供程序(开发人员身份验证)的身份标记。这是使用Cognito devauth演示servlet实现的。AWS认证返回 - '登录令牌无效。不是Cognito令牌'
此令牌返回给运行AWS JS SDK的浏览器。当我打电话给getCredentialsForIdentiy时,我收到'无效的登录令牌'错误。
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>
我注意到,新的congnito身份是通过使用id浏览器创建的。所以,与servlet的令牌交互似乎是正确的。但令牌被拒绝。
我在这里错过了什么?我如何进一步排除故障?
编辑: 浏览器客户端:javascript sdk,版本2.58。 基本上写一个JS客户端到this demo。这些修改只是将令牌作为登录调用本身的一部分。生成的令牌对应于只有IOT客户端访问权限的角色。 (我想知道这个政策是否需要扩大)。最终用户将通过内部ID存储进行验证,而不是此演示。
编辑2: 不是针对Cognito Service调用getCredentialsForIdentiy,而是针对STS调用了assumeRoleWithWebIdentity并且工作正常。使用基本流程而不是增强流程here.。真的不知道为什么增强流量不起作用,但现在将采取基本的流量方法。
您正在使用哪个SDK?你能否详细说明你如何管理这个流程?你描述的内容听起来很对,所以它应该是一些小事。 –
谢谢!增加了更多细节。 – user1452132