我正在尝试使用AWS Cognito进行身份验证(使用Google)并授权用户,以便为授权用户分配IAM角色。
到目前为止,我已按照以下步骤操作
code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx
之类的我得到一个错误的请求500错误
"id_token": "eyJraWQiOiJJR2NVdHJcL3pOa3pQK1lre...........",
"access_token": "eyJraWQiOiJCbWx0cjJvMnJlVGhHW..........",
"refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOi............",
"expires_in": 3600,
"token_type": "Bearer"
几个问题
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;
});
是一个非常长的字符串,但不确定我可以从中提取哪些信息?任何帮助或方向将不胜感激。
谢谢
步骤顺序是否正确?
我相信是这样。
{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"}
是一个非常长的字符串,但不确定我可以从中提取哪些信息?
id_token
和id_token
都是id_token
s。您可以对点之间的字符串进行base64解码以提取令牌的内容。通常我们关注的是中间部分或有效负载。
您可以将这些令牌粘贴到像access_token
这样的解码器中,并在浏览器中查看内容。在javascript中,JWT正如您所期望的那样工作。
我不确定您使用的是哪个用户ID,但如果用户名足够,则id_token包含this one密钥。
最后,如何让accessKey进行AWS调用?
更改atob()
地图中的提供程序。
如果您直接与Google交谈,而不是通过Cognito(通过cognito:username
)与Google交谈,您可以在Logins
地图中使用/oauth2/authorize
作为示例。
但是,您回来的令牌来自Cognito,而非Google。两个令牌都包含accounts.google.com
(issuer)密钥,这很可能是您的用户池ID。这是您应该在Logins
地图中使用的值。假设发行者是您的用户池:
iss