Аутентифицировать мутацию с помощью специального лямбда-авторизатора в AppSync - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь создать полностью управляемый API AppSync.

Я использую Custom Lambda Authorizer и хочу аутентифицировать некоторые mutation s. Я прочитал этот очень интересный пост о вложенных преобразователях и этот стековый пост, но я все еще не могу найти решение своей проблемы.

Итак, у меня есть mutation, скажем createReview, который должен быть решен преобразователем DynamoDB, и я хочу, чтобы мой пользовательский лямбда-авторизатор как авторизовал, так и аутентифицировал запрос createReview.

Как это должно быть организовано?

Я знаю, что мог бы либо решить свой запрос createReview с помощью распознавателя Lambda, либо использовать AWS Cognito в качестве Авторизатора, но я пытаюсь выполнить то, о чем просил.

Спасибо за любой совет

1 Ответ

0 голосов
/ 06 мая 2018

Пост, на который я ссылался, уже содержал достаточно информации для решения проблемы.

Я упрямо увлекся использованием мутации, потому что у меня не было достаточно знаний о GraphQL, чтобы отличить его от запроса.

Для решения проблемы достаточно отказаться от мутации и использовать запрос.

Итак, у меня есть

type Object {
   field1: String!
   field2: String
}

и

type AuthObject {
    field1: String!
    field2: String
    data: Object
}

мой запрос похож на

type Query {
    createObject (
        field1: String!
        field2: String
    ) : AuthObject
}

и лямбда-функция аутентификатора, которой передаются все аргументы и токен аутентификации. Задача этой функции - проверить токен и, если он действителен, вернуть все аргументы. В шаблоне выходного отображения, если лямбда не смогла аутентифицировать, GraphQL выдает сообщение unauthenticated, в противном случае возвращает аргументы.

Затем я прикрепил эти резольверы:

createObject => a resolver that calls the lambda and maps input and output

AuthObject.data:Object => a dynamodb resolver that calls PutItem using `$ctx.source` to retrieve the arguments.

На самом деле это то же самое, что и сообщение о взломе , я просто использовал PostItem вместо GetItem.

...