【问题标题】:Unrecognized Verify Auth Challenge Lambda response C#无法识别的验证身份验证挑战 Lambda 响应 C#
【发布时间】:2019-03-27 15:45:29
【问题描述】:

嗨,我正在 Cognito 用户池上实现自定义身份验证流程。我设法处理了Define-和CreateAuthChallenge-triggers,但没有处理VerifyAuthChallenge。

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

我采用 verify-lambda 输入并将 answerCorrect = true 添加到响应中,如文档中所述。 Define- 和 CreateChallenge-parts 使用给定的信息按预期工作。验证挑战答案,我得到InvalidLambdaResponseException: Unrecognizable lambda output 作为回复。 verify-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。可悲的是,我无法在任何地方找到任何关于返回的对象为什么不被 Cognito 接受的信息。

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

谁能告诉我,响应对象应该是什么样子才能被 Cognito 接受?谢谢。

【问题讨论】:

    标签: amazon-web-services .net-core aws-lambda amazon-cognito


    【解决方案1】:

    好吧,所以我的错误是没有考虑自定义身份验证流程。我找到了一个不同的文档,顺便说一下,你绝对应该使用它:

    Customizing your user pool authentication flow

    我在文档 here(触发器子页面)中遇到了 2 个错误部分,我遇到了 1 个错误。

    第 1 部分错误: 会话的 DefineAuthChallenge 和 CreateAuthChallenge 输入被定义为质询结果列表。这一切都很好,但是挑战结果对象的挑战元数据部分错误地显示为这样写:“ChallengeMetaData”,而它应该是“ChallengeMetadata”,“数据”用小写“d”而不是大写一。这给了我“无法识别的 lambda 输出”错误,因为“ChallengeMetaData”不是后端所期望的,它正在寻找不存在的“ChallengeMetadata”。第一次输入定义身份验证挑战 lambda 时,不会出现此错误,因为会话不包含任何挑战答案。但是,在您验证挑战的那一刻,它会被填充,然后大写的 d 会给您带来麻烦。

    错误的第 2 部分: 如我的问题所述,“challengeAnswer”的 VerifyAuthChallenge 输入是一个字符串,而不是字典。

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

    我这边的错误: 在您通过 VerifyAuthChallenge 触发器验证自定义质询后,我并没有真正检查会发生什么。在给定的链接中,在标题“DefineAuthChallenge:挑战(状态机)Lambda 触发器”上方的图像中,它清楚地指出,在验证响应后,再次调用 DefineAuthChallenge 触发器,我没有考虑过。

    我希望我可以节省一些时间来解决这个问题:-)

    【讨论】:

    • 你肯定帮我修好了!关键是要弄清楚在 VerifyAuthChallenge 之后再次调用 DefineAuthChallenge 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2012-10-14
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多