我想使用一个电话号码作为我的应用程序的用户名,我希望能够通过每次他们想要登录时验证电话号码来简化注册 - 没有杂乱的密码记住业务 .
如何使用AWS Cognito User Pool执行此操作,因为它要求我强制为每个用户配置密码 .
我想为每个用户使用虚拟密码并配置强制用户验证 . 每次用户退出时,我都可以“取消验证”用户,以便下次自动要求他们验证电话号码 . 此外,如果用户已经过验证,我会将我的应用程序连接到“登录” .
如果这是最好的方法,请告诉我:(我是AWS的新手,我找不到这个场景的任何帖子 .
谢谢 !!
3 回答
由于AWS Cognito目前不支持无密码身份验证,因此您需要使用外部存储的随机密码实施变通方法 . 您可以按如下方式实现身份验证流程 .
用户注册后(同时询问手机号码并强制要求),将手机号码,用户名和密码也存储在使用AWS KMS加密的Dynamodb中(为了提高安全性) .
您可以使用手机号码的MFA进行身份验证质询,以便在用户输入手机号码并按登录后(在前端),在后端您可以自动进行用户名密码匹配(直通)并触发MFA为用户发送代码移动并验证使用AWS Cognito SDK(无需实施自定义移动消息和质询) .
如果您计划手动(不使用MFA)实施流程以发送SMS和验证,则可以使用AWS SNS进行此操作 .
请查看以下代码示例以了解MFA的见解,并参阅this link以获取更多详细信息 .
注意:此处带有手机号码的MFA不会用于MFA,而是作为满足您要求的解决方法 .
这可能有效,但考虑到安全性,在dynamoDB中存储密码可能会有问题 . 相反,我们可以尝试这样:
option#1: - user sign ups with username and password.
setup cognito触发器 - 我们可以使用lambda函数 .
A.创建验证挑战B.定义验证挑战C.验证验证验证响应
客户端应用程序应实现CUSTOM_CHALLENGE身份验证流程 .
要求用户输入注册的电话号码,在用户名字段中传递 . 触发器B将理解请求并将流传递给触发器A,触发器A将生成随机代码5.使用AWS SNS服务向用户移动号码发送短信
触发器C将验证OTP并允许登录点考虑:a . 将电话号码设置为别名(选择也允许使用经过验证的电话号码登录)b . 使电话号码字段可验证(这允许用户接收OTP)
option#1: - user sign ups without username and password. cognito设置
设置电话号码作为别名(选择也允许使用经过验证的电话号码登录)
使电话号码字段可验证(这允许用户接收OTP)
注册时
不要求用户提供用户名和密码,只需询问电话号码即可
生成用户名和密码的UUID是唯一的,并将这些与电话号码一起传递给cognito
Cognito向用户发送OTP代码以进行帐户确认 .
用于具有OTP登录设置触发器的电话号码,如上述选项中所述 .
对于触发器代码,请参考aws cognito pool with multiple sign in options
这与OP要求的内容略有不同,因为它使用了一个秘密,但我认为这可能有助于其他人提出这个问题 .
我能够通过为Cognito触发器创建自定义lambda来实现此目的:定义Auth挑战,创建Auth挑战并验证Auth挑战 .
我的要求是我希望我的后端使用
secret
然后为任何Cognito用户获取访问和刷新令牌 .Define Auth Challenge Lambda
Create Auth Challenge Lambda
Verify Auth Challenge Lambda
然后我可以使用一些JS,使用amazon-cognito-identity-js来提供秘密并获取令牌: