【发布时间】:2019-02-24 06:43:18
【问题描述】:
首先,见过:
- https://github.com/amazon-archives/amazon-cognito-identity-js/issues/228
AWS Cognito User Pool without a password:此解决方案似乎设计过度,在 dynamodb 中生成、存储、引用用户密码或手动实施 SMS MFA
当然还有 Buggy@Github 的精彩示例: https://github.com/buggy/project-x-server/tree/master/shopify/src
但是,到目前为止,我看到的所有无密码流程似乎也使用自定义身份验证,例如验证码。我希望使用 AWS 的内置 SMS MFA,否则它对我来说非常有用。
使用:
- 放大
- React(原版)
有效的方法:
-
使用电话号码和密码登录,并使用确认码。即,这个:
const user = await Auth.signIn(this.state.phoneNumber, this.state.password) ...then... const data = await Auth.confirmSignIn(this.state.user, this.state.confirmationCode, 'SMS_MFA'); -
没有任何 MFA 的无密码登录,使用 Preauthentication Lambda 触发器(显然不是一个可行的解决方案):
event.response.issueTokens = true; event.response.failAuthentication = false;
问题: 当我尝试登录一个只发送用户名的用户帐户时:
const user = await Auth.signIn(this.state.phoneNumber)
Amplify 给出(拼写错误的)错误消息:
null failed with error Generate callenges lambda cannot be called..
即没有为用户池设置 lambda 触发器。
如果我设置了一个包含以下内容的 defineAuthChallenge 触发器:
event.response.issueTokens = true;
event.response.failAuthentication = false;
当然,它只是让我在没有 MFA 的情况下登录。但是,如果我将 issueTokens 设置为 false,则身份验证流程将失败,并且在下一页加载时我会从 amplify 中收到一个关于缺少 ID 令牌的错误。
如果我设置event.response.challengeName = 'SMS_MFA',错误就会消失,但不会发送短信,我也不会进行身份验证。
有没有办法 (a) 实际上以一种有效的方式将 SMS MFA 设置为我的“自定义挑战”? (b) 更好的是,根本不使用任何 lambda 触发器并让放大和用户池在没有密码的情况下继续运行?
就目前而言,我能看到的唯一解决方法:
- 手动实施 SMS MFA(不,谢谢)
- 客户端用户注册和登录的硬编码密码
【问题讨论】:
标签: aws-lambda amazon-cognito aws-amplify