You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

完成设备生物特征验证后,如何生成AWS Cognito令牌?

解决方案建议

为什么Client Credential授权不适用

Client Credentials Flow是OAuth2的客户端凭证模式,生成的令牌属于应用本身,不关联特定用户,无法包含用户属性,完全不符合你需要生成关联原用户的令牌的需求,直接排除。

可行方案:基于CUSTOM_AUTH流程的简化令牌生成

你可以复用现有CUSTOM_AUTH的Lambda触发器,通过添加分支逻辑,让生物特征验证通过后的请求直接跳过挑战流程,生成用户令牌,具体步骤如下:

1. 后端验证生物特征后调用Cognito API

当你在服务器端完成设备私钥的验证,确认用户身份(拿到手机号)后,调用Cognito的AdminInitiateAuth API,参数设置如下:

  • AuthFlow: CUSTOM_AUTH
  • AuthParameters:
    • USERNAME: 验证通过的手机号
    • BIOMETRIC_VERIFICATION_TOKEN: 后端生成的临时验证凭证(比如短时效的JWT或随机字符串,用于后续Lambda校验)

2. 修改DefineAuthChallenge Lambda触发器

在现有处理OTP的逻辑基础上,添加分支判断:

  • 检查AuthParameters中是否存在BIOMETRIC_VERIFICATION_TOKEN
  • 验证该凭证的有效性(比如后端提前将凭证存储在Redis等缓存中,Lambda调用缓存服务校验)
  • 若凭证有效且对应用户存在,直接返回成功响应:
{
  "ChallengeName": "SUCCESS",
  "ChallengeParameters": {},
  "IssueTokens": true,
  "FailAuthentication": false
}

这样Cognito会直接生成包含该用户所有属性的ID Token、Access Token和Refresh Token,无需走OTP的两步挑战流程。

3. 安全注意事项

  • 临时验证凭证必须设置短过期时间(比如5分钟),防止被滥用
  • Lambda中必须严格校验凭证的有效性,不能仅依赖前端或后端传递的标记
  • 确保AdminInitiateAuth的调用权限仅在后端服务中可用,禁止前端直接调用

备选方案(不推荐)

虽然Cognito没有直接生成令牌的API,但可以通过AdminSetUserPassword临时设置一个一次性密码,再调用AdminInitiateAuth用USER_PASSWORD_AUTH流登录,之后立即重置密码。但这种方式需要临时操作用户密码,不符合你“不存储用户密码”的要求,仅作为极端场景的备选。

内容的提问来源于stack exchange,提问作者Saurabh Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 22:43:14