Как правильно обрабатывать не прошедших проверку пользователей и запросы в приложениях AWS Amplify / AppSync React? - PullRequest
0 голосов
/ 13 декабря 2018

Мне очень трудно понять, как обращаться с неаутентифицированными пользователями в приложении React, которое использует AWS Amplify и AWS AppSync.Похоже, что большинство документов предлагают обернуть все приложение withAuthenticator HOC из aws-amplify-react, но в реальном мире это очень редкий случай.

Итак, вот как я настраиваю клиента для общения с AppSyncAPI

const client = new AWSAppSyncClient({
  url: AppSyncConfig.aws_appsync_graphqlEndpoint,
  region: AppSyncConfig.aws_appsync_region,
  auth: {
    type: AUTH_TYPE.AMAZON_COGNITO_USER_POOLS,
    jwtToken: async () =>
      (await Auth.currentSession()).getIdToken().getJwtToken()
  }
});

и затем я обертываю верхний уровень App компонент export default withAuthenticator(App);

Все эти работы, пользователь попадает в корневой URL и получает представление входа в систему.Как было сказано выше, это очень редкий случай в сценарии реального мира.Обычно корневой URL-адрес, как и многие другие, открыт для неаутентифицированных пользователей.Как это сделать с помощью AWS Amplify?- без документов, не прорезей: - (

Я нашел какой-то намек на то, как заставить это работать здесь , но все еще нет полного объяснения.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Мы работаем над простой автоматизацией этого в новой версии Amplify CLI.

Тем временем, выполните следующие шаги:

Используя следующие шаги, вы можете разрешить обаАутентифицированный и неаутентифицированный доступ к вашему API-интерфейсу AWS AppSync:

  1. Создание проекта Amplify
amplify init
  1. Добавление аутентификации с настраиваемой конфигурацией безопасности:
amplify add auth

Хотите использовать настройки аутентификации и безопасности по умолчанию? НЕТ

Выберите службы аутентификации / авторизации, которые вы хотите использовать: (Используйте клавиши со стрелками) Регистрация пользователя, вход в систему, связанные с элементами управления AWS IAM (Включено для-пользовательские функции хранения изображений и другого содержимого, аналитики и т. д.)

Пожалуйста, укажите понятное имя для вашего ресурса, который будет использоваться для обозначения этой категории в проекте: YOURAPINAME

Пожалуйста, введите имя для вашего удостоверения личности. YOURIDPOOLNAME

Разрешить вход без аутентификации?(Предоставляет ограниченные разрешения, которыми вы можете управлять через AWS IAM) Да

Выберите значения по умолчанию для остальных вопросов

Добавьте API
amplify add api

Выберите Amazon Cognito User Pool в качестве типа авторизации.

Создание API
amplify push

В настройках панели API AppSync измените тип аутентификации на Управление идентификацией и доступом AWS (IAM)

В aws.exports.js наклиентское приложение, измените aws_appsync_authenticationType на AWS_IAM

На панели инструментов Cognito нажмите «Управление пулами удостоверений» и щелкните свой пул удостоверений.

Нажмите «Изменить пул удостоверений», чтобы увидеть свою «роль, не прошедшую проверку подлинности» и «Роль, прошедшую проверку подлинности»

Откройте консоль IAM и найдите «роль, не прошедшую проверку подлинности», начиная с шага 8

Нажмите «Добавить встроенную политику»

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "appsync:GraphQL"
            ],
            "Resource": [
                "arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/listTodos"
            ]
        }
    ]
}

Откройте консоль IAM и найдите «роль с проверкой подлинности», начиная с шага 8

Нажмите «Добавить встроенную политику»

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "appsync:GraphQL"
            ],
            "Resource": [
                "arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/listTodos",
                "arn:aws:appsync:<REGION>:<ACCOUNTID>:apis/<APIID>/types/Mutation/fields/createTodo"
            ]
        }
    ]
}
В index.js добавьте этот код:
import { Auth } from 'aws-amplify'
Auth.currentCredentials()
  .then(d => console.log('data: ', d))
  .catch(e => console.log('error: ', e))
Теперь вы сможете выполнять запросы при выходе из системы, а также запрашивать и создавать мутации при входе в систему. Если вы хотите получить доступ к уникальному идентификатору пользователя, вошедшего в систему, для авторизации и детальной настройкиконтроль доступа, вы можете получить доступ к $context.identity.cognitoIdentityId в распознавателе.
0 голосов
/ 19 декабря 2018

Я предполагаю, что сценарий использования дает доступ к вашему API GraphQL для пользователей с правами доступа и авторизации, предоставляя им различные разрешения (например, пользователи с авторизацией могут выполнять мутации, а пользователи без авторизации - только некоторые запросы).В этом случае вам необходимо настроить AWS IAM в качестве типа аутентификации в API-интерфейсе AppSync, а также вам понадобится Amazon Cognito IdentityPool, который имеет доступ по умолчанию и авторизацию, и настроить роли IAM для них в соответствии с вашими требованиями.

Более подробный ответ здесь

...