【问题标题】:Passwordless Cognito with SMS MFA带有 SMS MFA 的无密码 Cognito
【发布时间】:2019-02-24 06:43:18
【问题描述】:

首先,见过:

当然还有 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


    【解决方案1】:

    我通过以下方式实现了无密码 Cognito:

    1. 将刷新令牌过期时间设置为很长的时间
    2. 当用户注册时,生成一次性密码并使用常规 Cognito 注册 API 来创建用户
    3. 永远不要存储或向用户显示一次性密码 - 依靠 Cognito 会话刷新来保持用户“登录”
    4. 如果刷新令牌过期或出现其他问题,请滥用 Cognito 重置密码流程,向用户发送验证码并生成另一个一次性密码。

    这对我们有用,但它有点老套。但是,它不依赖任何自定义触发器并使用常规 Cognito 客户端 API。虽然没有用 MFA 尝试过

    【讨论】:

    • 我明白你在说什么。但是,让我们采取以下步骤: (1.) 使用临时密码调用 Cognito signUp API (2.) 此时,用户可以是 UNCONFIRMED (3.) 用户收到验证码 (4.) 用户输入验证码 5.用户确认。现在,我们可以登录用户了。我们获取用户验证码并使用临时密码对用户进行身份验证。我们必须存储在第 1 步中生成的密码,以便在第 5 步中检索它。你是如何绕过它的?
    【解决方案2】:

    可能有用: Password-free SMS Authentication with AWS Cognito, Lambda Node.js & iOS Swift

    它建议直接使用 SNS 而不是通过 Cognito 的 MFA。

    【讨论】:

    • 该链接不再可用。你有类似的吗?谢谢。
    猜你喜欢
    • 2018-11-13
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2019-04-01
    • 2023-03-05
    相关资源
    最近更新 更多