aws appsyn c директива auth, не ограничивающая доступ, как ожидается - PullRequest
1 голос
/ 24 февраля 2020

В моей схеме graphQl для appsyn c api, который я использую, я хочу ограничить действия моих пользователей в зависимости от группы, к которой они принадлежат.

В соответствии с документами добавление строки aws_auth(cognito_groups: ["Admins"]) должно ограничить доступ только пользователям, входящим в группу «Администраторы». Этого не происходит, когда я запускаю мутацию из консоли appsyn c или из самого приложения.

Моя мутация выглядит следующим образом:

type Mutation @aws_iam
@aws_cognito_user_pools {
    createItem(input: CreateItemInput!): Item
    updateItem(input: UpdateItemInput!): Item
    @aws_auth(cognito_groups: ["Admins"])
}

Директивы @aws_iam и @aws_cognito_user_pools кажется, работает нормально. Но любой, кто прошел проверку подлинности или имеет роль iam, может выполнить обновление, даже если он не принадлежит к группе «Администраторы».

Что здесь происходит? Нужна ли дополнительная настройка, чтобы это работало?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Просто для пояснения, поскольку это недостаточно хорошо задокументировано.

Если вы используете один поставщик авторизации, а этот поставщик - Cognito, вы всегда должны использовать директиву @aws_auth. Не используйте директиву @aws_cognito_user_pools, поскольку она не работает, если вы используете групповую авторизацию. Это плохо документировано в AWS Cognito docs и является ловушкой, так как AppSyn c позволит вам настроить эту директиву.

Если вы используете несколько провайдеров авторизации и используете Cognito, вы должны используйте директиву @aws_cognito_user_pools, как описано в документах AWS Cognito. Как ни странно, авторизация на основе групп работает правильно, используя @aws_cognito_user_pools, но ТОЛЬКО при использовании нескольких поставщиков авторизации.

1 голос
/ 24 февраля 2020

В общем, вам следует избегать использования @aws_auth одновременно с @aws_cognito_user_pools & aws_iam, поскольку они ведут себя несколько иначе ( см. Документы здесь ).

Если вы хотите ограничить доступ к updateItem, в то же время разрешая любому авторизованному пользователю IAM createItem, тогда вы можете использовать:

type Mutation {
    createItem(input: CreateItemInput!): Item
      @aws_iam
    updateItem(input: UpdateItemInput!): Item
      @aws_cognito_user_pools(cognito_groups: ["Admins"])
}

Размещение директивы в типе означает, что конфигурация аутентификации действительна для все поля в этом типе. Размещение директивы на поле делает ее применимой только к полю.

...