AWS Cognito - 凭据问题

问题描述 投票:2回答:1

我正在尝试使用AWS Cognito进行身份验证(使用Google)并授权用户,以便为授权用户分配IAM角色。

到目前为止,我已按照以下步骤操作

  1. 使用授权端点启动Google OAuth流程http://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html 我正在使用“格兰特流”我收到了诸如code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx之类的
  2. 向oauth / token qazxsw poi发帖请求 我收到以下信息: qazxsw poi
  3. 尝试使用CognitoIdentityCredentials获取AWS信用 http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html

我得到一个错误的请求500错误

"id_token": "eyJraWQiOiJJR2NVdHJcL3pOa3pQK1lre...........",
"access_token": "eyJraWQiOiJCbWx0cjJvMnJlVGhHW..........",
"refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOi............",
"expires_in": 3600,
"token_type": "Bearer"

几个问题

  1. 步骤顺序是否正确?
  2. 如何获得CongnitoUserId? 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; }); 是一个非常长的字符串,但不确定我可以从中提取哪些信息?
  3. 最后,如何让accessKey进行AWS调用?

任何帮助或方向将不胜感激。

谢谢

amazon-web-services amazon-cognito aws-cognito federated-identity aws-java-sdk
1个回答
1
投票

步骤顺序是否正确?

我相信是这样。

{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"} 是一个非常长的字符串,但不确定我可以从中提取哪些信息?

id_tokenid_token都是id_tokens。您可以对点之间的字符串进行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
© www.soinside.com 2019 - 2024. All rights reserved.