Нераспознанный ответ проверки подлинности лямбда-ответ C # - PullRequest
0 голосов
/ 17 января 2019

Hy, я реализую пользовательский поток аутентификации в Cognito User Pool. Мне удалось обработать триггеры Define- и CreateAuthChallenge, но не VerifyAuthChallenge.

Я использую эту документацию в качестве руководства: Проверка ответа на запрос проверки подлинности Лямбда-триггер

Я беру ввод-лямбда-ввода и добавляю answerCorrect = true к ответу, как описано в документации. Определить- и CreateChallenge-части работают, как и ожидалось с данной информацией. Проверяя ответы на вызовы, я получаю InvalidLambdaResponseException: Unrecognizable lambda output в качестве ответа. Ламбда verify успешно существует, возвращая этот объект:

{
    "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? Спасибо.

1 Ответ

0 голосов
/ 17 января 2019

Что ж, моя ошибка заключалась в том, что я не учитывал пользовательский процесс аутентификации. Я нашел другую документацию, кстати, которую вы обязательно должны использовать:

Настройка потока аутентификации пула пользователей

Я столкнулся с 2 неправильными частями в документации здесь (подстраницы триггеров) и 1 ошибка с моей стороны.

Неправильная часть 1: Входные данные DefineAuthChallenge и CreateAuthChallenge для сеанса определяются как список результатов испытаний. Это все нормально, но объект результата запроса имеет неправильно отображаемую часть метаданных вызова, которая записывается так: «ChallengeMetaData», когда вместо этого должно быть «ChallengeMetadata», с строчным «d» вместо «data» вместо «data» верхний регистр один. Это дало мне ошибку «Нераспознанный лямбда-вывод», потому что «ChallengeMetaData» не был тем, чего ожидал сервер, он искал «ChallengeMetadata», которого не было. Когда вы в первый раз вводите лямбду define auth challenge, эта ошибка не отображается, потому что сеанс не содержит ответов на вызов. Однако, как только вы подтвердите вызов, он заполняется, и заглавная буква d доставляет вам неприятности.

Неправильная часть 2: Как описано в моем вопросе, ввод VerifyAuthChallenge для «challengeAnswer» - это строка, а не словарь.

Все эти неправильные части правильно отображаются на первой странице документации, на которую я ссылался здесь. Поэтому я рекомендую использовать это вместо другой документации.

Ошибка на моей стороне: Я действительно не проверял, что происходит после того, как вы проверите пользовательский вызов через триггер VerifyAuthChallenge. В приведенной ссылке на изображении над заголовком «Лямбда-триггер DefineAuthChallenge: задачи (конечный автомат)» четко указано, что после проверки ответа снова запускается триггер DefineAuthChallenge, который я не рассматривал.

Я надеюсь, что смогу сэкономить кому-то время, которое понадобилось мне, чтобы понять это с помощью этого: -)

...