Python密钥斗篷获取用户的角色和组

Python密钥斗篷获取用户的角色和组,python,keycloak,Python,Keycloak,使用创建的组和分配给组的角色。 然后创建用户并将用户分配到特定组 要在我使用的应用程序中访问所有这些 如中所述,使用以下代码访问用户信息 from keycloak import KeycloakOpenID keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/", client_id="account", realm_na

使用创建的组和分配给组的角色。 然后创建用户并将用户分配到特定组

要在我使用的应用程序中访问所有这些

如中所述,使用以下代码访问用户信息

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

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

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

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

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

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

您需要在同一个库python keydove中使用keydoveadmin类:

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

要使用keydoveadmin,您需要一个能够访问admin cli的用户。

您需要在同一个库python keydove中使用keydoveadmin类:

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")
要使用keydapeadmin,您需要一个能够访问admin cli的用户

转到KeyClope,选择客户端->映射器->创建。 在映射器类型列表中,选择组成员资格。 在令牌声明名称字段中,指定所需的userinfo属性名称,例如组。 在“名称”字段中,指定映射器名称所需的内容,然后单击“保存”。 请尝试使用你的应用程序再次验证密钥斗篷。用户组现在应该是 在userinfo JSON中可见。 转到KeyClope,选择客户端->映射器->创建。 在映射器类型列表中,选择组成员资格。 在令牌声明名称字段中,指定所需的userinfo属性名称,例如组。 在“名称”字段中,指定映射器名称所需的内容,然后单击“保存”。 请尝试使用你的应用程序再次验证密钥斗篷。用户组现在应该是 在userinfo JSON中可见。
我认为我们必须为用户在keydepeat中设置域或客户端角色。 设置后,您将自动获取“用户组”中的角色详细信息

干杯
SG

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

干杯
SG

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

获取组详细信息的示例: 获取/{realm}/users/{id}/groups


您可以参考用户API的Key斗篷官方文档,也可以使用Key斗篷API检索特定的用户组和角色详细信息

获取组详细信息的示例: 获取/{realm}/users/{id}/groups


您可以参考用户API的KeyClope官方文档

有趣的解决方案。因此,这实质上是使用角色、组或其他可用信息向“userinfo”响应对象添加自定义字段。我理解正确吗?@Vasily Angapov令牌声明名称字段的值组来自哪里?我正在尝试找出社交认证应用程序django软件包的等价物。这应该是选定的答案。最干净的。有趣的解决方案。因此,这实质上是使用角色、组或其他可用信息向“userinfo”响应对象添加自定义字段。我理解正确吗?@Vasily Angapov令牌声明名称字段的值组来自哪里?我正在尝试找出社交认证应用程序django软件包的等价物。这应该是选定的答案。它们中最干净的。当然,尝试用我的凭据获取令牌会失败:/usr/local/lib/python3.6/site-packages/keydove/keydove\u admin.py in uuuu init\uuuuuuuuo self.get\u token…local vars/usr/local/lib/python3.6/site-packages/keydove/keydove\u admin.py in token-self.\u-token=self=self=self.keydove\u openid.username,self.password,grant_type=grant_type…Local vars/usr/Local/lib/python3.6/site-packages/keydove/keydove\u openid.py在令牌返回中从响应数据raw,keydovegeterror中引发错误,并在服务器\u url的末尾加上反斜杠,给出此错误:异常值:401:b'{错误:无效的\u授权,错误\u说明:无效的用户凭据}“。我的用户是管理员。您需要配置客户端密钥,1.确保服务帐户已启用2.为其分配客户端角色->领域管理客户端角色->查看用户这会导致尝试使用我的凭据获取令牌,当然:/usr/local/lib/python3.6/site-packages/keydrope/keydrope\u admin.py in uuuu init\uuuuuuuu self.get\u令牌…local vars/u获取令牌self中的sr/local/lib/python3.6/site-packages/keydove/keydove\u admin.py。令牌=self.keydove\u openid.tokenself.username,self.password,grant\u type=grant\u type…本地vars/usr/local/lib/python3.6/site-packages/keydove/keydove\u openid.py返回令牌中的raw\u error\u responsedata\u服务器\u url末尾的反斜杠给出以下错误:异常值:401:b'{错误:无效的\u授权,错误\u描述:无效的用户凭据}'。我的用户是Admin您需要配置客户端密钥,1.确保服务帐户已启用2.为其分配客户端角色->领域管理客户端角色->查看用户