繁体   English   中英

AWS - 在现有 React web 应用程序上使用用户名和密码从现有 Cognito 用户池获取用户令牌

[英]AWS - Get user token from an existing Cognito User Pool with username and password on an existing React web app

我有一个从create-react-app创建的简单 React web 应用程序。

我在 Amazon Cognito 上也有一个现有的用户池(由第三方设置)。 我已获得用于身份验证的用户名和密码。 一旦通过身份验证,Cognito 将提供 JWT 令牌。

我想要实现的是对用户进行身份验证,并在App组件的componentDidMount方法中获取 JWT access_token; 然后使用令牌调用其他API来检索一些数据,然后将数据显示在App组件上。

以下信息已知:

region
USER_POOL_ID
APP_CLIENT_ID
USER_ACCOUNT
USER_PASSWORD

AWS 为 Python 开发人员提供了authenticate_and_get_token function。 JavaScript 和 React 开发人员是否有等价物? 任何示例代码表示赞赏。

不知道您提到的authenticate_and_get_token ,在Boto3 docs中找不到这个 function 。 但我确实知道不同的 function 来检索一个名为adminInitiateAuth的令牌。 这是可用于 JS 的 function。

您可以使用 Lambda 来实现这一点,如下所示:

const AWS = require('aws-sdk');
const USER_POOL_ID  = "us-east-1_*******";
const APP_CLIENT_ID = "***********";
const USER_ACCOUNT  = "***********";
const USER_PASSWORD = "***********";

const cognitoClient = new AWS.CognitoIdentityServiceProvider({
    apiVersion: "2016-04-19",
    region: 'us-east-1'
});

exports.handler = async (event) => {
    try {
        const userData = await userSignIn(USER_ACCOUNT, USER_PASSWORD);
        return userData // refer to userData.AuthenticationResult.IdToken;
    } catch(e){
        throw e;
    }

};

const userSignIn = async (username, password) => {
    try {
        var params = {
            AuthFlow: 'ADMIN_NO_SRP_AUTH',     
            ClientId: APP_CLIENT_ID ,     
            UserPoolId: USER_POOL_ID,     
            AuthParameters: {         
                USERNAME: username,        
                PASSWORD: password
            } 
        };
        
        return await cognitoClient.adminInitiateAuth(params).promise();
    } catch (err) {
        return err.message ? err : {message : err};
    }
};

请确保您具有调用此方法的特定权限,例如"Action": "cognito-idp:AdminInitiateAuth", lambda 权限或 IAM 角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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