AWS Cognito - 凭证问题
AWS Cognito - Credentials Issue
我正在尝试使用 AWS Cognito 对用户进行身份验证(使用 Google)和授权,目的是为授权用户分配 IAM 角色。
到目前为止我已经按照以下步骤操作
使用授权端点启动Google OAuth 进程
http://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html
I am using "Grant flow"
I receive a such as code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx
向 oath/token http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
发出 post 请求
I receive the following information:
"id_token": "eyJraWQiOiJJR2NVdHJcL3pOa3pQK1lre...........",
"access_token": "eyJraWQiOiJCbWx0cjJvMnJlVGhHW..........",
"refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOi............",
"expires_in": 3600,
"token_type": "Bearer"
尝试使用 CognitoIdentityCredentials
获取 AWS 凭证
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;
});
I get a bad request 500 error
{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"}
几个问题
- 步骤顺序是否正确?
- 如何获得 CongnitoUserId?
id_token
是一个很长的字符串,但不确定我可以从中提取什么信息?
- 最后,如何获得 accessKey 以进行 AWS 调用?
任何帮助或指导将不胜感激。
谢谢
Is the sequence of steps followed correct?
我相信是的。
id_token
is a very long string, but not sure what information can I extract from it?
id_token
和 access_token
都是 JWT。您可以对点之间的字符串进行 base64 解码以提取令牌的内容。通常我们关注中间部分,或 payload.
您可以将这些标记粘贴到解码器中,就像 this one, and view the contents in your browser. In javascript, atob()
一样工作。
我不确定您要查找的用户 ID,但如果用户名足够,id_token 包含一个 cognito:username
键。
Finally how to I get accessKey to make AWS calls?
更改 Logins
地图中的供应商。
如果您直接与 Google 交谈,而不是通过 Cognito(通过 /oauth2/authorize
)与 Google 交谈,您将在 Logins
地图如您的示例所示。
但是,您取回的令牌来自 Cognito,而不是来自 Google。两个令牌都包含一个 iss
(发行者)密钥,这很可能是您的用户池 ID。这是您应该在 Logins
映射中使用的值。假设发行人是您的用户池:
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxx': token
}
我正在尝试使用 AWS Cognito 对用户进行身份验证(使用 Google)和授权,目的是为授权用户分配 IAM 角色。
到目前为止我已经按照以下步骤操作
使用授权端点启动Google OAuth 进程 http://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html
I am using "Grant flow" I receive a such as
code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx
向 oath/token http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
发出 post 请求I receive the following information:
"id_token": "eyJraWQiOiJJR2NVdHJcL3pOa3pQK1lre...........", "access_token": "eyJraWQiOiJCbWx0cjJvMnJlVGhHW..........", "refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOi............", "expires_in": 3600, "token_type": "Bearer"
尝试使用 CognitoIdentityCredentials
获取 AWS 凭证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; });
I get a bad request 500 error
{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"}
几个问题
- 步骤顺序是否正确?
- 如何获得 CongnitoUserId?
id_token
是一个很长的字符串,但不确定我可以从中提取什么信息? - 最后,如何获得 accessKey 以进行 AWS 调用?
任何帮助或指导将不胜感激。
谢谢
Is the sequence of steps followed correct?
我相信是的。
id_token
is a very long string, but not sure what information can I extract from it?
id_token
和 access_token
都是 JWT。您可以对点之间的字符串进行 base64 解码以提取令牌的内容。通常我们关注中间部分,或 payload.
您可以将这些标记粘贴到解码器中,就像 this one, and view the contents in your browser. In javascript, atob()
一样工作。
我不确定您要查找的用户 ID,但如果用户名足够,id_token 包含一个 cognito:username
键。
Finally how to I get accessKey to make AWS calls?
更改 Logins
地图中的供应商。
如果您直接与 Google 交谈,而不是通过 Cognito(通过 /oauth2/authorize
)与 Google 交谈,您将在 Logins
地图如您的示例所示。
但是,您取回的令牌来自 Cognito,而不是来自 Google。两个令牌都包含一个 iss
(发行者)密钥,这很可能是您的用户池 ID。这是您应该在 Logins
映射中使用的值。假设发行人是您的用户池:
Logins: {
'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxx': token
}