簡體   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