繁体   English   中英

如何使用 Amplify Auth 获取 IAM 凭证?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM