提问人:Soer 提问时间:2/10/2023 更新时间:5/24/2023 访问量:270
通过 MFA 验证码(无密码)使用 AWS Cognito 用户池进行服务器端用户验证
Server-side user verification with AWS Cognito user pool via MFA verification code (without password)
问:
在使用 NodeJS + NestJS 的服务器端,TS: 4.7.4, “aws-sdk”: “^2.1138.0”。 尝试向 AWS Cognito 发送请求,以获取手机上的验证码。 距离实现短信配额还很遥远。
我的方法示例来自服务:
async sendVerificationCode(phoneNumber: string) {
const params = {
AuthFlow: 'USER_SRP_AUTH',
ClientId: process.env.AWS_COGNITO_CLIENT_ID,
// UserPoolId: process.env.AWS_COGNITO_USER_POOL,
AuthParameters: {
USERNAME: phoneNumber,
SRP_A: generateSRPA(),
},
};
console.debug('=========== params: ', params);
try {
const result = await this.cognitoIdentityServiceProvider
.initiateAuth(params)
.promise();
console.log('=========== result: ', result);
return result;
} catch (error) {
if (error instanceof Error) {
console.debug('=========== Error: ', error.message);
throw error;
}
}
}
第 SRP_A 代示例:
const N_HEX ='EEAF0AB9ADB38DD69C33F80AFA...';
export function generateSRPA() {
const random = randomBytes(32);
const randomHex = random.toString('hex');
const srpA = createHash('sha256').update(randomHex).digest('hex');
return createHash('sha256').update(srpA).update(N_HEX).digest('hex');
}
现在,请求已成功发送到 AWS 并获得响应:
=========== result: {
ChallengeName: 'PASSWORD_VERIFIER',
ChallengeParameters: {
SALT: '4e9b...',
SECRET_BLOCK: '4x1k...',
SRP_B: '161d...',
USERNAME: 'b1d9...',
USER_ID_FOR_SRP: 'b1d9...'
}
}
但我的手机没有收到验证码。 同时,使用相同的用户池和相同的手机,所有流程都可以在连接到 Cognito 的移动应用程序上运行良好。
答: 暂无答案
评论