代码之家  ›  专栏  ›  技术社区  ›  Ivan Tomilov

是否可以从CUSTOM_AUTH流调用Cognito中的SOFTWARE_TOKEN_MFA挑战(或任何其他MFA挑战)?

  •  0
  • Ivan Tomilov  · 技术社区  · 1 年前

    我们有一个应用程序,使用Cognito来验证用户和处理MFA。我们还使用CUSTOM_AUTH流,因为我们需要将CUSTOM_CHALLENGE与defineauth、createauth和verifyauth lambdas一起使用,这些lambdas允许我们处理Cognito不支持的电子邮件MFA。

    现在我需要实现额外的MFA来执行应用程序中的一些操作,我有点卡住了。我们的想法是只触发其中一个MFA挑战(取决于用户配置的内容),并使用CUSTOM_CHALLENGE应用一些其他安全控制,但我无法让Cognito在CUSTOM_AUTH中触发其任何MFA挑战。

    为了简化,假设我们只有以下createauth lambda函数:

    def lambda_handler(event, context):
        print("received event:", event)
        process_event(event)
        print("response event:", event)
        return event
    
    
    def process_event(event):
        if len(event["request"]["session"]) == 0:
            event["response"]["issueTokens"] = False
            event["response"]["failAuthentication"] = False
            event["response"]["challengeName"] = "SOFTWARE_TOKEN_MFA"
            return
    
        s = event["request"]["session"][len(event["request"]["session"]) - 1]
    
        if s["challengeName"] == "SOFTWARE_TOKEN_MFA" and s["challengeResult"]:
            event["response"]["issueTokens"] = True
            event["response"]["failAuthentication"] = False
            return
    
        event["response"]["issueTokens"] = False
        event["response"]["failAuthentication"] = True
        
    

    基本上,它假设用户 SOFTWARE_TOKEN_MFA 已启用(仅用于测试)并发送 软件_打开_ MFA 挑战作为流程中的第一个挑战。然后,它检查是否通过了验证,并向用户发出访问令牌。

    当我开始身份验证时:

    aws cognito-idp initiate-auth --auth-flow CUSTOM_AUTH \
            --client-id <client-id> \
            --region ap-southeast-2 \
            --auth-parameters 'USERNAME=<username>'
    

    一切如预期:

    {
        "ChallengeName": "SOFTWARE_TOKEN_MFA",
        "Session": "<session>",
        "ChallengeParameters": {
            "USERNAME": "<user-id>"
        }
    }
    

    但是,当我提供有效代码时(我可以证明它是有效的,因为我已经以“正常方式”为此用户配置了MFA,并且可以使用验证器应用程序代码登录):

    aws cognito-idp respond-to-auth-challenge 
        --client-id <client-id>
        --region ap-southeast-2 
        --challenge-name SOFTWARE_TOKEN_MFA 
        --challenge-responses 'USERNAME=<user-id>,SOFTWARE_TOKEN_MFA_CODE=612345' 
        --session <session>
    

    我收到以下错误:

    An error occurred (CodeMismatchException) when calling the RespondToAuthChallenge operation: Invalid code or auth state for the user.
    

    所以,基本上我的问题是:是否有可能从CUSTOM_AUTH流触发任何MFA挑战?如果有,我如何在不询问用户密码的情况下完成?

    我在谷歌上搜索过,试图在stackoverflow上找到它,和chat gpt聊过,但没有找到答案。如果你对此事有任何了解,我将不胜感激。

    0 回复  |  直到 1 年前