Python Keycloak Получить роли и группы пользователей

Использование Key Cloak создавало группы и назначало им роли. Затем создал пользователей и назначил пользователей в определенные группы.

Для доступа ко всему этому в моем приложении я использую Python-Keycloak

Как уже упоминалось в github doc, используйте следующий код для доступа к пользовательской информации.

from keycloak import KeycloakOpenID

keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/",
                    client_id="account",
                    realm_name="demo",
                    client_secret_key="my_secret_key")

config_well_know = keycloak_openid.well_know()

token = keycloak_openid.token("username", "password")
userinfo = keycloak_openid.userinfo(token['access_token'])

Получение следующей информации о пользователе

{
    'family_name': 'Lastname', 
    'preferred_username': 'user_name', 
    'sub': 'some_key', 
    'given_name': 'Fistname', 
    'name': 'Firstname Lastname', 
    'email': 'email@example.com'
}

Как я могу получить доступ к информации о группах и ролях пользователя.

5 ответов

  1. Зайдите в Keycloak, выберите ваш клиент -> Mapper -> Create.
  2. В списке Mapper Type выберите "Членство в группе".
  3. В поле Token Claim Name укажите желаемое имя свойства userinfo, например, "Группы".
  4. В поле "Имя" укажите все, что вы хотите для имени маппера, и нажмите "Сохранить".
  5. Попробуйте еще раз аутентифицироваться в Keycloak с вашим приложением. Группы пользователей теперь должны быть видны в пользовательской информации JSON.

Вам нужно использовать класс "KeycloakAdmin" в той же библиотеке (python-keycloak):

from keycloak import KeycloakAdmin

admin = KeycloakAdmin(server_url='https://server-url',
                      username='username',
                      password='password',
                      realm_name='realm',
                      verify=True)

user_groups = admin.get_user_groups(user_id="user-id")

Для использования KeycloakAdmin вам потребуется пользователь с доступом к "admin-cli".

Создал одного администратора для моего царства. и наследовать класс, как это

from keycloak import KeycloakAdmin
from keycloak.exceptions import raise_error_from_response, KeycloakGetError

class CustomKeycloakAdmin(KeycloakAdmin):
    def get_user_group(self,user_name):
        USER_GROUP_URL = "admin/realms/{realm-name}/users/{user-id}/groups"
        params_path = {"user-id":self.get_user_id(user_name),"realm-name": self.realm_name}
        data_raw = self.connection.raw_get(USER_GROUP_URL.format(**params_path))
        return raise_error_from_response(data_raw, KeycloakGetError)

if __name__=="__main__":
    keycloak_admin = CustomKeycloakAdmin(server_url="http://localhost:8080/auth/",username='admin_user',password='admin_password',realm_name="my_realm",verify=True)
    user_group = keycloak_admin.get_user_group("user_name")

Вы также можете использовать API keycloak для получения сведений о конкретной группе и роли пользователя.

Пример CURL для получения сведений о группе: GET /{realm}/users/{id}/groups

      curl 'http://keycloak.local:8000/auth/admin/realms/master/groups?first=0&max=20' \
  -H 'Connection: keep-alive' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Authorization: Bearer <access_token>' \
  --compressed \
  --insecure

Вы можете обратиться к официальной документации keycloak на веб-сайте пользовательского API keycloak.

Я думаю, мы должны установить для пользователя роль области или клиента в Keycloak. После того, как вы установите, вы автоматически получите подробную информацию о роли в 'user_groups'

Ура SG

Другие вопросы по тегам