Amazon web services AWS Cognito-凭证问题

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

我试图使用AWS Cognito来验证(使用Google)和授权用户,目的是为授权用户分配IAM角色

到目前为止,我一直遵循以下步骤

  • 使用授权端点启动GoogleOAuth进程

    我正在使用“赠款流动” 我收到一个类似于
    code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx

  • 向宣誓/代币发出post请求

    我收到以下信息:

  • 尝试使用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;
    });
    
  • 我收到一个错误的请求

    几个问题

  • 所遵循的步骤顺序是否正确
  • 我怎样才能弄到一个黏糊糊的
    id\u token
    是一个很长的字符串,但不确定可以从中提取哪些信息
  • 最后,如何获取accessKey以进行AWS调用
  • 任何帮助或指导都将不胜感激

    谢谢

    所遵循的步骤顺序是否正确

    我相信是这样

    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
    }