Appsync авторизация для не авторизованных пользователей - PullRequest
0 голосов
/ 07 ноября 2018

Я использую Appsync в приложении Vue и настроил пулы пользователей Cognito, чтобы пользователи могли входить в мое приложение. Тем не менее, в моем приложении есть страницы, на которых неавторизованный пользователь должен иметь возможность просматривать только то есть: «думать: читать ответы при переполнении стека», однако в некоторых случаях пользователи должны иметь возможность добавлять комментарии к эту страницу и нужно войти, чтобы редактировать ее.

В моем API в Appsync у меня установлена ​​авторизация «Пул пользователей Amazon Cognito», а действие по умолчанию - «Разрешить», но как мне сделать так, чтобы пользователи, не пользующиеся когнитами, могли просматривать страницу? Какую комбинацию настроек мне использовать?

1 Ответ

0 голосов
/ 08 ноября 2018

К сожалению, AppSync не поддерживает несколько методов аутентификации, и, как вы заметили, интеграция Cognito UserPool требует, чтобы пользователи выполнили вход, прежде чем они смогут получить доступ к конечной точке graphql.

Есть несколько обходных путей, однако ни один из них не настолько хорош:

  • Развертывание двух версий - одна с полной функциональностью с использованием UserPools и одна открытая версия с использованием API-ключа (который вы встраиваете в клиент)
  • Выполните аутентификацию самостоятельно. Используйте безопасность роли IAM для синхронизации приложений и вместо прямого подключения к конечной точке graphql создайте лямбда-прокси в API-шлюзе, которая либо проверяет пользователей UserPool, либо разрешает ограниченный доступ без учетных данных.
  • Создайте пользователя «user» в вашем UserPool с известными (например, в вашем приложении или из конечной точки) учетными данными. Тогда вам придется проверить, является ли ваш пользователь этим пользователем при ответе на защищенные мутации / запросы. Одним из способов сделать это более безопасно может быть добавление пользовательского атрибута «custom: insecure», который вы можете проверить на неоткрытых конечных точках.
  • Используйте шаблон просмотра (проверьте реализацию Facebook). Сделайте вашу схему GraphQL открытой по умолчанию (например, известный ключ API), и все ваши запросы / мутации будут принимать первый параметр viewer. Это может быть токен доступа, который Cognito возвращает при аутентификации. Затем каждый распознаватель будет отвечать за определение того, является ли токен действительным (например, cognito::getUser) или доступ разрешен без определения viewer.

Хотя изначально это звучит как самое сложное, я бы порекомендовал свое первое решение. Существуют способы автоматизации развертываний AppSync, и это делает четкое различие между тем, что открыто, и тем, что защищено в вашей схеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...