[英]How to generate aws-exports.js with existing User Pool in AWS 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.