我对使用 AssumeRoleWithWebIdentity 方法有点困惑。 让我一步步描述。
第 1 步:-我从 facebook 获取 facebook token 。
第 2 步:-使用 getId 方法,我从 amzon cognito 获取 IdentityId。
第 3 步:-使用 getOpenIdToken 并传递 IdentityId,我得到 {IdentityId,Token} 作为响应。
(问题1:我可以使用此 token 访问亚马逊服务吗?)
第 4 步:- 然后我尝试实现 AssumeRoleWithWebIdentity 方法
使用参数:-
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:当我在响应中使用 getOpenIdToken 提供的 WebIdentityToken 以及 ProviderId 作为 www.amazon.com 我收到 InvalidIdentityToken:提供的 token 不是使用 Amazon token 登录
问题 5:- 当我使用 facebook 提供的 WebIdentityToken 和 graph.facebook.com 提供的 ProviderId 时strong> 我收到 AccessDenied: 无权执行 sts:AssumeRoleWithWebIdentity
如果授予访问权限的方式正确,请逐步说明
最佳答案
您的最终目标似乎是为您的应用程序用户获取临时 AWS 凭证。您不需要为此与 AssumeRoleWithWebIdentity 进行交互。 Amazon Cognito 联合身份直接出售 AWS 凭证并隐藏所有 STS 交互。
如 authentication flow documentation 中所述,您需要与 GetId 和 GetCredentialsForIdentity API 进行交互,您的应用程序用户将直接获取临时 AWS 凭证。
关于问题 3 的回答,GetOpenIdToken 提供的 OpenId token 不能直接与 AWS API 一起使用。详细解释可以引用this answer .
关于javascript - 如何在 Ionic 3 项目中配置 Amazon AssumeRoleWithWebIdentity 的访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617397/