如何在Ionic 3项目中为访问令牌配置Amazon AssumeRoleWithWebIdentity?

时间:2017-10-07 06:32:11

标签: javascript amazon-web-services ionic3 amazon-cognito aws-cognito

我使用AssumeRoleWithWebIdentity方法有点混乱。 让我一步一步地描述。

第1步: - 我从facebook获取facebook令牌。

第2步:使用getId方法,我从amzon cognito获得IdentityId。

步骤3:-used getOpenIdToken并传递IdentityId我得到{IdentityId,Token}作为回应。

(问题1:我可以使用此令牌访问亚马逊服务吗?)

步骤4: - 然后我正在尝试实现AssumeRoleWithWebIdentity方法

使用params: -

params = {
        RoleArn: arn:aws:iam::XXXXX:role/XXXXX,
        RoleSessionName: 'XXXX',
        WebIdentityToken: 'XXXX'
        DurationSeconds: 3600,
        ProviderId: 'www.amazon.com'
    };

    let sts = new AWS.STS();
    sts.assumeRoleWithWebIdentity(params, function (err, data) {
    if (err) console.log(err, err.stack);
    else console.log(data);
})

问题2:-WebIdentityToken,我必须使用facebook或者cognito提供的那个来回复getOpenIdToken方法。

问题3: - ProviderId,我试图使用facebook登录它是graph.facebook.com还是www.amazon.com?

问题4:当我使用 WebIdentityToken 作为响应时提供 getOpenIdToken ProviderId 提供 www.amazon.com < / strong>我收到 InvalidIdentityToken :提供的令牌不是使用亚马逊令牌登录

问题5: - 当我使用 Facebook ProviderId 提供的 WebIdentityToken 作为 graph.facebook.com 我正在获取AccessDenied:未授权执行sts:AssumeRoleWithWebIdentity

如果正确如何提供访问权限请逐步说明

1 个答案:

答案 0 :(得分:1)

您的最终目标似乎是为您的应用用户获取临时AWS凭据。您不需要与AssumeRoleWithWebIdentity进行交互。 Amazon Cognito Federated Identities直接发布AWS凭证并隐藏所有STS交互。

正如authentication flow documentation中所述,您需要与GetId和GetCredentialsForIdentity API进行交互,您的应用用户将直接获得临时AWS凭据。

至于对问题3的回答,GetOpenIdToken提供的OpenId令牌不能直接与AWS API一起使用。有关详细说明,请参阅this answer