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

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

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

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

Как это организовать?

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

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


person balsick    schedule 01.05.2018    source источник


Ответы (1)


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

Я упорно увлекался использованием мутации, потому что у меня не было достаточно знаний о 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.

Фактически это то же самое, что и hackernoon post, я просто использовал PostItem вместо GetItem.

person balsick    schedule 06.05.2018