AWS Cognito 邮箱验证后是否支持直接免密登录应用
AWS Cognito邮箱验证后免密直接登录的实现说明
可以实现该需求,但是不属于AWS Cognito的默认能力,需要你做自定义的流程改造,具体说明如下:
默认流程说明
- AWS Cognito原生的邮箱验证流程中,用户点击邮件内的验证按钮后,仅会将账户状态从
UNCONFIRMED(未验证)改为CONFIRMED(已验证),不会自动下发登录凭证,因此默认情况下用户仍需手动输入邮箱、密码完成登录。
自定义免登的实现方案
你可以通过改造验证邮件链接和后端逻辑实现免登,推荐的落地流程如下:
- 首先在Cognito用户池的对应App客户端配置中,开启
ADMIN_NO_SRP_AUTH权限(该权限允许你在服务端无需用户输入密码即可获取身份凭证) - 自定义Cognito的验证邮件模板,将验证链接的目标地址修改为你自己的后端接口,而非Cognito默认的验证端点
- 用户点击邮件链接跳转至你的后端接口后,先提取链接携带的Cognito验证
code参数,调用Cognito的ConfirmSignUp接口完成账户的邮箱验证 - 验证通过后,服务端直接调用Cognito的
AdminInitiateAuth接口,传入对应用户的用户名信息,获取登录所需的id_token、access_token、refresh_token三类凭证 - 后端将凭证通过安全的方式(比如HttpOnly Cookie、或临时授权码跳转兑换的方式)传递给前端,前端拿到有效凭证后即可直接进入应用的登录态,无需用户手动输入账号密码
注意事项
- 验证链接、临时凭证的有效期建议设置为15分钟以内,避免凭证泄露被恶意利用
- 流程中需要增加CSRF校验逻辑,避免恶意构造的验证链接盗用用户身份
- 不要在邮件、前端本地存储中明文保存用户的密码等敏感信息,上述方案全程不需要接触用户的明文密码
内容的提问来源于stack exchange,提问作者Sanjay Prakash
相关产品推荐
相关产品推荐

