Amazon Cognito 无密码认证项目教程
1. 项目介绍
1.1 项目概述
amazon-cognito-passwordless-auth
是一个开源项目,旨在通过 Amazon Cognito 实现无密码认证。该项目提供了多种无密码认证方式,包括 FIDO2(WebAuthn,支持 Passkeys)、Magic Link 和 SMS OTP Step Up。这些方法通过自定义认证流程来增强安全性,减少用户摩擦,并提供更好的用户体验。
1.2 主要功能
- FIDO2: 支持 WebAuthn,允许用户使用面部识别、指纹、YubiKey 等方式进行认证。
- Magic Link: 通过发送一次性使用的秘密链接进行认证。
- SMS OTP Step Up: 允许已登录用户通过 SMS 一次性密码(OTP)再次验证身份。
1.3 适用场景
该项目适用于需要提高用户认证安全性和用户体验的客户面向应用程序。通过 Amazon Cognito 的自定义认证流程,开发者可以轻松扩展认证因素,满足不同应用场景的需求。
2. 项目快速启动
2.1 环境准备
- 安装 Node.js 和 npm。
- 安装 AWS CDK(Cloud Development Kit)。
2.2 安装项目
git clone https://github.com/aws-samples/amazon-cognito-passwordless-auth.git
cd amazon-cognito-passwordless-auth
npm install
2.3 配置和部署
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import { Passwordless } from "amazon-cognito-passwordless-auth/cdk";
class SampleTestStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const passwordless = new Passwordless(this, "Passwordless", {
userPool: yourUserPool, // 可选,如果不提供将自动创建 Amazon Cognito User Pool
allowedOrigins: ["http://localhost:5173"], // 指定所有暴露 Web 应用的 URL
magicLink: {
sesFromAddress: "no-reply@auth.example.com" // 必须是 Amazon SES 中验证过的域名或身份
},
fido2: {
allowedRelyingPartyIds: ["localhost"] // 指定希望用作 Relying Party ID 的域名
},
smsOtpStepUp: [] // 如果不需要 SMS OTP Step Up 认证,可以省略此项
});
new cdk.CfnOutput(this, "ClientId", {
value: passwordless.userPoolClients.at(0).userPoolClientId
});
new cdk.CfnOutput(this, "Fido2Url", {
value: passwordless.fido2Api.url
});
}
}
2.4 前端集成
根据项目文档,将前端代码集成到 Web、React 或 React Native 应用中。
3. 应用案例和最佳实践
3.1 应用案例
- 企业内部应用: 通过 FIDO2 和 Magic Link 实现无密码登录,提高安全性。
- 电商网站: 使用 SMS OTP Step Up 在支付环节增加额外的安全验证。
- 社交媒体平台: 通过 Magic Link 简化用户登录流程,提升用户体验。
3.2 最佳实践
- 安全性: 确保所有依赖项保持最新,以防止安全漏洞。
- 用户体验: 根据用户反馈调整认证流程,减少用户摩擦。
- 可扩展性: 根据业务需求扩展认证方法,如添加新的 FIDO2 设备支持。
4. 典型生态项目
4.1 AWS Amplify
amazon-cognito-passwordless-auth
与 AWS Amplify 完全兼容,可以与 Amplify 的其他功能(如存储、PubSub)协同工作。
4.2 React 和 React Native
项目提供了 React 和 React Native 的预构建组件,开发者可以快速集成到现有应用中。
4.3 Amazon SES
用于发送 Magic Link 和 OTP 邮件,确保邮件发送的安全性和可靠性。
通过以上步骤,您可以快速启动并使用 amazon-cognito-passwordless-auth
项目,提升应用的安全性和用户体验。