Схема GraphQL сшивание с аутентификацией - PullRequest
0 голосов
/ 29 мая 2018

Моя идея - создать микросервисный подход с GraphQL и без сервера.

Я подумываю о создании службы для каждой таблицы в DynamodB, а затем о создании службы Apigateway, а в службе Apigateway используйте GraphQl-инструмент для сшивания схем.

Эта работа довольно хорошая, и я доволен.

Но теперь я хочу добавить авторизацию к моим запросам и мутациям в GraphQL.

Я добавил пользовательский аутентификатор в apigateway, который разрешает токен JWT от клиента и отправляет его в контекст graphql с userId

Но теперь я хочу добавить авторизацию для моих распознавателей.

Каков наилучший подход для этого?

Я хочу, чтобы он был как можно более модулирующим, и лучше всего (я думаю) добавить авторизацию в сервисе apigatway, чтобы мой другой сервис оставался чистым.Но я не знаю как?

Есть идеи?

1 Ответ

0 голосов
/ 11 июля 2018

Возможно, вы захотите взглянуть на AppSync из AWS.Это поможет вам в этом;авторизаторы, запросы к DyanmoDB и т. д.

Я создал API-интерфейсы Lambda с использованием Apollo GraphQL и показал их через API-шлюз.Затем я использовал схему сшивания Аполлона, чтобы соединить их вместе.Здесь есть одно очень важное предупреждение: это slooow .С API Gateway уже есть снижение скорости, и, хотя это приемлемо, представьте, что вы должны перепрыгнуть через несколько шлюзов, прежде чем возвращать ответ пользователю.Вы можете кэшировать схему, что немного помогает.Ваша терпимость будет зависеть от вашего приложения и конечно UX.Может быть, это просто нормально - только вы (или ваши пользователи) могут ответить на этот вопрос.

В этой записке, кроме того, я обработал аутентификацию, приняв заголовок авторизации и сделав проверку вручную.Я не использовал никаких пользовательских авторизаторов из API Gateway.Я не использовал Cognito для этого, поэтому он говорил с другим сервисом.Это все произошло до распознавателей.Почему вы ищете для авторизации в резольверах?Есть ли что-то, что вы хотите защитить?Контроль доступа?

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

GraphQL имеет одну конечную точку POST для всего.Так что это не поможет в настройке аутентификации шлюза API для каждого ресурса.Это означает, что теперь вы находитесь за пределами API Gateway и в любом случае находитесь в вызове Lambda.Вы не препятствовали вызову, поэтому сейчас вам выставляют счет и запускают код.

Так что вы могли бы также написать свою собственную логику для аутентификации.Если вы используете Cognito, то вам поможет SDK.Или взгляните на AppSync.

...