Aws усиливает использование нескольких пулов пользователей Cognito в одном GraphQL Api

#reactjs #amazon-web-services #graphql #aws-amplify #aws-appsync

#reactjs #amazon-веб-сервисы #graphql #aws-amplify #aws-appsync

Вопрос:

Я новичок в AWS Amplify и пытаюсь сделать простой проект.

У меня есть два разных проекта интерфейса (react). Один из них для читателей блогов, а другой для редакторов.Для обоих приложений я хочу использовать одни и те же таблицы DynamoDB (и использовать graphql api). Но я хочу использовать разные пулы пользователей для каждого проекта. Как я могу это реализовать?

Я читал эту статью — https://medium.com/@fullstackpho/aws-amplify-multi-auth-graphql-public-read-and-authenticated-create-update-delete-1bf5443b0ad1

Я знаю, что AWS AppSync поддерживает несколько типов авторизации, таких как cognito, ключ api… Но поддерживает ли он два типа cognito?

Спасибо,

Комментарии:

1. Вы имеете в виду cognito group или cognito user_pool по типу cognito?

Ответ №1:

Согласно документации AWS, вы можете использовать две разные группы Cognito для доступа к одному и тому же API AppSync, обращающемуся к одной и той же таблице DynamoDB, следующими способами, которые довольно просты;

Если вы используете aws_auth директиву

 type Query {
  getPosts:[Post!]! 
  @aws_auth(cognito_groups: ["Bloggers", "Readers"])
}
  

Если вы используете aws_cognito_user_pools директиву

 type Query {
  getPosts:[Post!]!
  @aws_api_key @aws_cognito_user_pools(cognito_groups: ["Bloggers", "Readers"])
}
  

Теперь, если вам конкретно нужны два разных пула пользователей для вашего одного и того же API и таблицы DynamoDB, вам придется пройти немного больше миль, чтобы достичь этого. Ниже приведены шаги:

  1. Добавьте оба ваших пула пользователей в качестве дополнительных поставщиков авторизации в настройках AppSync.
  2. Используйте @aws_cognito_user_pools директиву с вашими запросами и мутацией в схеме и объекте, к которому эти запросы и мутации пытаются получить доступ.
  3. Это сложная задача! Когда вы пытаетесь получить доступ к $ctx.identity.cognitoIdentityPoolId в своем распознавателе запросов / мутаций, он выдает вам null. Потому что cognitoIdentityPoolId включен только в AWS_IAM заголовок авторизации, а не в AWS_COGNITO_USER_POOLS [Ссылка]. Однако вы все равно можете получить идентификатор пула пользователей из iss поля в $ctx.identity.claims , и это будет выглядеть примерно так https://cognito-idp.us-xxxx-x.amazonaws.com/us-xxxx-X_XxxXxxXX . Это us-xxxx-X_XxxXxxXX ваш идентификатор пула пользователей, который вам нужно будет как-то проанализировать.
  4. После анализа идентификатора пула пользователей вы можете фильтровать своих пользователей на основе идентификатора пула Cognito, а затем предоставлять им доступ к нужной вам таблице.

Комментарии:

1. Должны ли оба пула пользователей быть дополнительными поставщиками авторизации? Или один может быть поставщиком аутентификации по умолчанию и еще один дополнительным?