Cognito getId: NotAuthorizedException: 无效的登录令牌.不是有效的 OpenId



我是Cognito的新手(JWT令牌和整个身份验证(,所以请原谅我问愚蠢的问题。我正在尝试将 Cognito 用户池与身份池一起使用。我使用默认 URL (https://testapi123.auth.us-east-2.amazoncognito.com/login?response_type=token&client_id=<>&scope=openid&redirect_uri=https://aws.amazon.com( 登录了一个用户并得到了一个令牌。我无法弄清楚如何从此令牌中获取身份 ID 以在 getId(( API 中使用。我想稍后使用它从联合身份池中获取凭据(不确定我是否也拥有该部分(。

作为参考,我有我的代码 -

var AWS = require('aws-sdk');
var cognitoidentity = new AWS.CognitoIdentity({apiVersion: '2014-06-30'});
exports.handler = (event, context, callback) => {
// TODO implement
var params = {
IdentityPoolId: 'us-east-2:<xxxxxx>', /* required */
AccountId: 'xxxxxxx',
Logins: {
'cognito-idp.us-east-2.amazonaws.com/us-east-2_xxxxx': '<**identityID???**>',
}
};
cognitoidentity.getId(params, function(err, data) {
if (err) console.log('Error3 : ' + err, err.stack); // an error occurred
else {
console.log('retval:' + JSON.stringify(data));           // successful response
var idenId = data.idenId;
var params = {
IdentityId: idenId,
CustomRoleArn: 'arn:aws:iam::xxxxxxxxx:role/cc_admin',
Logins: {
'CognitoIdentity': 'cognito-idp.us-east-2.amazonaws.com/us-east-2_xxxxxxx'
}
};
cognitoidentity.getCredentialsForIdentity(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else     console.log(data);           // successful response
});
}
});
callback(null, 'Hello from Lambda 1');
};

错误 - "2018-06-06T18:59:58.614Z ce0fc216-69bb-11e8-bbfc-4fff0d953dd4 错误 3:未授权异常:登录令牌无效。令牌签名无效。未授权异常:登录令牌无效。令牌签名无效。

我尝试解析收到的 JWT 令牌(使用 jwt.io(。它向我展示了一些详细信息,但似乎没有一个是要在请求中使用的身份 ID。我还尝试使用整个令牌作为身份 ID。

真的需要帮助。谢谢。

首先,您只需要在参数中传递身份池 ID,getId 函数即可工作。它将返回与您的身份池关联的身份 ID。取代

var params = {
IdentityPoolId: 'us-east-2:<xxxxxx>', /* required */
AccountId: 'xxxxxxx',
Logins: {
'cognito-idp.us-east-2.amazonaws.com/us-east-2_xxxxx': '<**identityID???**>',
}
};

var params = {
IdentityPoolId: 'us-east-2:<xxxxxx>'
}

其次,除非您有 idToken,即 JWT(用户池成功进行身份验证后返回到客户端的 JSON Web 令牌(,否则您无法创建凭据。

它看起来像这样..

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

只能通过登录来获取此令牌...配置 aws-cli 后在终端上运行此命令,或使用 aws-sdk 并运行函数 InitiateAuth

aws cognito-idp admin-initiate-auth --user-pool-id ap-south-1_xxxxxxx --client-id AAAAAAAAAAAAAAAAAAAAA --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME="abc@123.com",PASSWORD="********" 

最后,将传递给getCRedentials方法"登录"密钥的参数函数更改为:

Logins: {
"IdentityId": <result from getId>
"cognito-idp.us-east-2.amazonaws.com/us-east-2_xxxxxxx": <your idToken>
}

最新更新