Как избежать добавления пользователя во все группы с ресурсом - PullRequest
0 голосов
/ 29 мая 2020

Новичок в использовании Keycloak, и я пытаюсь понять назначение ролей пользователям. Это тот формат, который я использую. Я создаю роли и пользователей и создаю группы с определенными ролями. Затем я назначаю пользователей в группы, чтобы получить разрешения на основе ролей в группе. Теперь у меня возникли трудности в следующем случае.

Допустим, у меня есть 4 ресурса A, B, C, D, 2 роли R1, R2, 2 группы G1, G2 и пользователь U.

R1 имеют разрешения (я использую эти области авторизации: read, write, create, delete) для доступа к A, B.
R2 имеют разрешения на доступ только к ресурсам A, B, C, D.
G1 имеет роль R1, а G2 имеет назначенную им роль R2.

Теперь я создаю пользователя U и хочу предоставить ему доступ к G1, надеясь, что этот пользователь будет иметь доступ к 2 упомянутым ресурсам. Но это не так, и я заметил, что U не имеет доступа ни к одному из 4 ресурсов. Мне также нужно будет добавить этого пользователя в G2, чтобы получить доступ ко всем 4 ресурсам, а это не то, что я хотел.

Также в другом случае, если я хочу добавить пользователя в G2, я ожидайте, что у него будет доступ ко всем 4 ресурсам. Но я заметил, что этот пользователь может получить доступ только к C, D. И я должен добавить его в G1, чтобы получить доступ ко всем ресурсам.

Я считаю, что keycloak проверяет режим условия and при назначении разрешений. Есть ли способ определить роли с ресурсами, исключительными друг для друга?

1 Ответ

1 голос
/ 29 мая 2020

Исходя из моего опыта использования Keycloak и при отсутствии вашей полной конфигурации, я бы рекомендовал добавить разрешения в картинку.

https://www.keycloak.org/docs/latest/authorization_services/#_permission_overview

ПРИМЕЧАНИЕ: обратите внимание, что это всего лишь ЛИЧНАЯ рекомендация, а не быстрый подход.

Когда вы используете разрешение, вы можете установить утвердительную стратегию принятия решения. (Кажется, в вашем случае разрешение по умолчанию установлено на Единогласное, что означает, что все политики должны оцениваться как истинные)

(https://www.keycloak.org/docs/latest/authorization_services/#_permission_decision_strategies)

Как я бы подошел к этому это:

  1. Назначьте роли группам (так же, как и вы) G1 -> R1 G2 -> R2

  2. Добавить пользователей в группы ( так же, как и вы)

  3. Создайте политику на основе ролей для R1 (Policy1) и R2 (Policy2).

  4. Создайте разрешение для каждого ресурс (PermA, PermB, Perm C, PermD)

  5. Свяжите разрешение с необходимой политикой ролей

(на вашем примере)

Т.к. R2 имеет доступ ко всем ресурсам. Свяжите Политику 2 со всеми 4 разрешениями.

Поскольку R1 имеет доступ к ресурсам A, B. Свяжите политику1 только с PermA, PermB.

Сохранение утвердительной стратегии решения.

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