如何使用Amplify Auth获得IAM凭据?



我正在尝试使用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。如果省略它们,将返回空凭据。

所以Amplify做了所有的事情。我刚开始使用Amplify,这比直接处理SRP要省力得多。

最新更新