![](/img/trans.png)
[英]How do you enable "iam.serviceAccounts.actAs" permissions on a sevice account?
[英]How do you get IAM credentials using Amplify Auth?
我正在尝试使用 Amplify ^5.0.7 获取 IAM 凭证。 我能够成功登录并获取 OpenID 令牌:
Auth.signIn({
username: user,
password: password
})
.then((u: CognitoUser) => {
console.log("User", u);
console.log("Credentials", Auth.Credentials);
console.log("Essential credentials", Auth.essentialCredentials(Auth.Credentials));
return Auth.currentSession();
}).then((data: CognitoUserSession) => {
console.log("Current session", data);
return Auth.essentialCredentials(Auth.currentCredentials())
}).then((c: ICredentials) => {
console.log("Credentials", c);
})
成功登录,并获取具有 ID、访问和刷新令牌的当前会话。 问题是没有凭证。 currentCredentials() 返回一个 ICredentials 对象,但它的字段都是未定义的。 我认为那些应该映射到临时 IAM 凭证。
我正在测试的用户恰好属于一个组,并且该组分配有一个 IAM 角色。
我是否缺少请求临时 IAM 凭证的步骤? 我没有在后端使用放大。 我真的在使用 Amplify Auth,因为它为我处理 SRP。
我想我明白了,而且比我想象的要简单。 我想发布我为修复它所做的工作,以防其他人遇到同样的问题。
我所做的基本上是正确的,除了你不需要先获得会话。
Auth.signIn({
username: userInput,
password: passwordInput
})
.then((u: CognitoUser) => {
console.log("Auth.credentials", Auth.Credentials)
return Auth.currentCredentials()
}).then((currentCredentials: ICredentials) => {
console.log("Essential credentials", Auth.essentialCredentials(currentCredentials))
})
并没有真正的“代码”技巧来让它工作。 真正的问题是我对如何设置 Cognito 不够谨慎。 为此,您需要一个用户池和一个身份池。 身份池指向用户池。 我已经这样做了,但我没有正确设置 Amplify。 工作的方式是:
Amplify.configure({
Auth: {
mandatorySignIn: true,
region: 'us-east-1',
userPoolId: 'us-east-1_CX1xxxxxx',
userPoolWebClientId: '5eo394ojo1gvdm6cbxxxxxxxxxs',
identityPoolId: 'us-east-1:f69259b2-ff84-4731-b80c-xf421-xxxx'
}
});
如果您不关心 IAM 凭证,您似乎不需要身份池,也不需要指定其 ID。 如果您将它们排除在外,您只会得到一个空的 Credentials。
所以 Amplify 会做所有事情。 我是 Amplify 的新手,与直接处理 SRP 相比,工作量要少得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.