首先,您已经看到:
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,否则它对我来说一直很好。
使用:
有效的方法:
使用电话号码和密码登录,并输入确认码。即:
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');
使用预身份验证Lambda触发器(显然不是可行的解决方案),无需任何MFA即可进行无密码登录:
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,则身份验证流程将失败,并且在下一页加载时放大会提示我缺少ID令牌。
如果我设置了event.response.challengeName = 'SMS_MFA'
,错误就会消失,但是SMS不会发送,并且我也不会进行身份验证。
有没有办法 (a)实际上以一种可行的方式将SMS MFA设置为我的“自定义挑战”? (b)更好,是根本不使用任何lambda触发器并进行放大,并且用户池中没有密码吗?
就目前而言,我只能看到的解决方法:
答案 0 :(得分:0)
我通过以下方式实现了无密码的Cognito:
这对我们有用,但是有点hacky。但是,它不依赖任何自定义触发器,而是使用常规的Cognito客户端API。尚未在MFA上尝试过
答案 1 :(得分:0)
可能有用: Password-free SMS Authentication with AWS Cognito, Lambda Node.js & iOS Swift
这建议直接使用SNS,而不是通过Cognito的MFA。