【问题标题】:Python Keycloak Get Roles and Groups of userPython Keycloak 获取用户的角色和组
【发布时间】:2018-09-11 17:52:16
【问题描述】:

使用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'
}

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

【问题讨论】:

    标签: python keycloak


    【解决方案1】:

    您需要在同一个库中使用“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”的用户。

    【讨论】:

    • 这会在试图获取令牌时死掉(当然是用我的凭据):/usr/local/lib/python3.6/site-packages/keycloak/keycloak_admin.py in __init__ self.get_token() … Local vars /usr/local/lib/python3.6/site-packages/keycloak/keycloak_admin.py in get_token self._token = self.keycloak_openid.token(self.username, self.password, grant_type=grant_type) … Local vars /usr/local/lib/python3.6/site-packages/keycloak/keycloak_openid.py in token return raise_error_from_response(data_raw, KeycloakGetError)
    • 并且在 server_url 末尾带有反斜杠,它给出了这个错误:Exception Value: 401: b'{"error":"invalid_grant","error_description":"Invalid user credentials"}'。我的用户是管理员
    • 您需要配置客户端密钥,1. 确保“服务帐户已启用” 2. 为其分配客户端角色 -> 领域管理客户端角色 -> 查看用户
    【解决方案2】:
    1. 转到 Keycloak,选择您的客户端 -> 映射器 -> 创建。
    2. 在 Mapper Type 列表中选择“Group Membership”。
    3. 在令牌声明名称字段中指定所需的用户信息属性名称,例如“群组”。
    4. 在名称字段中指定您想要的映射器名称,然后单击保存。
    5. 再次尝试使用您的应用对 Keycloak 进行身份验证。用户组现在应该是 在用户信息 JSON 中可见。

    【讨论】:

    • 有趣的解决方案。因此,这实质上是将自定义字段添加到带有角色、组或其他可用信息的“用户信息”响应对象中。我理解正确吗?
    • @Vasily Angapov 令牌声明名称字段的值“组”来自哪里?我正在尝试弄清楚 social-auth-app-django 包的等效项。
    • 这应该是选择的答案。最干净的。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      干杯 新加坡

      【讨论】:

        【解决方案5】:

        您还可以使用 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-19
          • 2021-09-12
          • 1970-01-01
          • 2019-09-26
          • 2019-06-12
          • 2021-03-30
          • 2015-05-14
          • 2021-11-01
          相关资源
          最近更新 更多