Amazon web services AWS Cognito-凭证问题
我试图使用AWS Cognito来验证(使用Google)和授权用户,目的是为授权用户分配IAM角色 到目前为止,我一直遵循以下步骤Amazon web services AWS Cognito-凭证问题,amazon-web-services,amazon-cognito,aws-cognito,federated-identity,aws-java-sdk,Amazon Web Services,Amazon Cognito,Aws Cognito,Federated Identity,Aws Java Sdk,我试图使用AWS Cognito来验证(使用Google)和授权用户,目的是为授权用户分配IAM角色 到目前为止,我一直遵循以下步骤 使用授权端点启动GoogleOAuth进程 我正在使用“赠款流动” 我收到一个类似于code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx 向宣誓/代币发出post请求 我收到以下信息: 尝试使用CognitoIdentityCredentials获取AWS凭证 AWS.config.credentials = new AWS.C
code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: environment.identityPoolId, // Federated ID eu-west-2:af47703f-350c-4018-ae6a-xxxxxx
RoleArn: environment.roleArn,// IAM role
Logins: { 'accounts.google.com': data.id_token },
});
AWS.config.getCredentials((error) => {
if(error) console.log("Error: ", error);
this.creds = AWS.config.credentials;
});
id\u token
是一个很长的字符串,但不确定可以从中提取哪些信息id\u token
是一个很长的字符串,但不确定可以从中提取哪些信息
id\u令牌
和access\u令牌
都是s。您可以对点之间的字符串进行base64解码,以提取令牌的内容。通常我们关心的是中间部分,或有效载荷
您可以将这些令牌粘贴到类似的解码器中,并在浏览器中查看内容。在javascript中,它可以按预期工作
我不确定你要找的是什么用户id,但是如果用户名足够,id_令牌包含一个cognito:username
键
最后,如何获取accessKey以进行AWS调用
在登录
地图中更改提供商
如果您直接与谷歌交谈,而不是通过Cognito(通过/oauth2/authorize
)与谷歌交谈,您将使用登录地图中的accounts.Google.com
,如您的示例所示
然而,你得到的代币来自Cognito,而不是谷歌。这两个令牌都包含一个iss
(颁发者)密钥,该密钥很可能是您的用户池Id。这是您应该在登录
映射中使用的值。假设发卡机构是您的用户池:
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxx': token
}
谢谢我能够解码令牌,并使用上面提到的iss密钥更正了登录映射,但我仍然收到相同的错误消息{“_type”:“NotAuthorizedException”,“message”:“无效的登录令牌。颁发者与providerName不匹配”}。通过登录地图中的“token”,我假设您指的是id_token。下面是我的id_token详细信息“Identifications”:[{“userId”:“1068…”,“providerName”:“Google”,“providerType”:“Google”,“issuer”:null,//谢谢!最后,为了让它工作,我不得不从iss密钥中去掉https://号。
{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"}
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxx': token
}