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