代码之家  ›  专栏  ›  技术社区  ›  Sven Möhring

无法识别的验证身份验证质询lambda响应c#

  •  0
  • Sven Möhring  · 技术社区  · 6 年前

    hy,我正在一个cognito用户池上实现一个定制的auth流。我设法处理了define-和createAuthChallenge触发器,但没有处理verifyAuthChallenge。

    我将此文档用作指南: Verify Auth Challenge Response Lambda Trigger

    我接受验证lambda输入并添加 answerCorrect = true 响应,如文档中所述。define-和createCleallenge部分使用给定的信息按预期工作。验证挑战答案,我得到 InvalidLambdaResponseException: Unrecognizable lambda output 作为回应。验证lambda已成功存在,返回此对象:

    {
        "version": 1,
        "triggerSource": "VerifyAuthChallengeResponse_Authentication",
        "region": "eu-central-1",
        "userPoolId": "eu-central-1_XXXXXXXXX",
        "callerContext": {
            "awsSdkVersion": "aws-sdk-dotnet-coreclr-3.3.12.7",
            "clientId": "2490gqsa3gXXXXXXXXXXXXXXXX"
        },
        "request": {
            "challengeAnswer": "{\"DeviceSub\":\"TestSub\"}",
            "privateChallengeParameters": {
                "CUSTOM_CHALLENGE": "SessionService_SendDevice"
            },
            "userAttributes": {
                "sub": "8624237e-0be8-425e-a2cb-XXXXXXXXXXXX",
                "email_verified": "true",
                "cognito:user_status": "CONFIRMED",
                "email": "X.XXXXXXXX@XXXXXXXXXX.de"
            }
        },
        "response": {
            "answerCorrect": true
        },
        "userName": "8624237e-0be8-425e-a2cb-XXXXXXXXXXXX"
    }
    

    之前,我遇到了一个问题,“challengeanswer”部分在文档中被描述为一个字典,但实际上它只是一个字符串,将字典包含为json。遗憾的是,我在任何地方都找不到任何信息来解释为什么认知不接受返回的对象。

    显然有人和我有同样的问题,使用javascript: GitHub link

    有人能告诉我,反应对象应该是什么样的,以便被认知所接受吗?谢谢您。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sven Möhring    6 年前

    好吧,所以我的错误是没有考虑自定义身份验证流。我发现了一个不同的文档,也就是您应该明确使用的文档:

    Customizing your user pool authentication flow

    我在文档中遇到了两个错误的部分 here (触发器子页)和我的1个错误。

    错误部分1: 会话的DefineAuthChallenge和CreateAuthChallenge输入定义为挑战结果列表。这很好,但challenge result对象的challenge元数据部分错误地显示为这样写的:“challengemtadata”,而应该是“challengemtadata”,小写的“d”代表“data”,而不是大写的。这给了我一个“无法识别的lambda输出”的错误,因为“challengemtadata”不是后端所期望的,而是在寻找“challengemtadata”,它不存在。第一次输入define auth challenge lambda时,不会显示此错误,因为会话不包含任何质询答案。不过,当您验证一个挑战时,这个问题就被填满了,然后大写的d会给您带来麻烦。

    错误部分2: 如我问题中所述,“challengeanswer”的verifyAuthChallenge输入是字符串,而不是字典。

    所有这些错误的部分都正确地显示在我链接到这里的第一个文档页面上。所以我建议使用它而不是其他文档。

    我这边的错误: 在您通过VerifyAuthChallenge触发器验证自定义质询之后,我没有真正检查会发生什么。在给定的链接中,在标题“defineauthchallenge:the challenges(state machine)lambda trigger”上方的图像中,它清楚地指出,在验证响应之后,defineauthchallenge触发器再次被调用,我没有考虑到这一点。

    我希望我能节省一些时间,让我用这个来解决这个问题。