Python Keycloak获取角色和用户组

时间:2018-04-02 13:47:30

标签: 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'])

获取以下userinfo

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

如何访问用户的组和角色信息。

5 个答案:

答案 0 :(得分:1)

您需要在同一库(python-keycloak)中使用“ KeycloakAdmin”类:

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”的用户。

答案 1 :(得分:0)

为我的领域创建了一个管理员用户。并继承像这样的类

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")

答案 2 :(得分:0)

  1. 转到Keycloak,选择您的客户端->映射器->创建。
  2. 在“映射器类型”列表中,选择“组成员身份”。
  3. 在“令牌声明名称”字段中,指定所需的userinfo属性名称,例如“组”。
  4. 在“名称”字段中指定所需的映射器名称,然后单击“保存”。
  5. 再次尝试使用您的应用向Keycloak进行身份验证。用户组现在应该是 在userinfo JSON中可见。

答案 3 :(得分:0)

我认为我们必须在 Keycloak 中为用户设置领域或客户端角色。 设置后,您将自动获取“user_groups”中的角色详细信息

干杯 SG

答案 4 :(得分:0)

您还可以使用 keycloak API 来检索特定用户组和角色的详细信息

示例 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

Users API可以参考keycloak官方文档keycloak Website