gpt4 book ai didi

python - 如何使用 python-keycloak 与不同领域的管理员用户一起获取 keycloak 中的客户端 key

转载 作者:行者123 更新时间:2023-12-03 08:06:14 25 4
gpt4 key购买 nike

我已经制定了有效的工作流程。我从 keycloak 获得一个带有管理员用户名/密码的 token 到此端点 auth/realms/master/protocol/openid-connect/token使用此 token ,我请求有关连接到另一个领域(而不是主领域)的特定客户端的客户端 secret 。因此,我请求此端点在 header 中提供我的全新 token 作为此端点的承载 auth/admin/realms/realm_name/clients/client_name/client-secret我可以拥有客户 secret 有了这个客户端 secret ,我可以获得一个客户端 token ,请求使用客户端凭据发送到此端点 auth/realms/realm_name/protocol/openid-connect/token最后,我将这个客户端 token 用于我的东西。我可以使用 python-keycloak 来获取管理 token

keycloak_admin = KeycloakAdmin(server_url=url,
username='user',
password='password',
verify=True)

但是一旦我到达这里,我就无法拥有客户端 key ,因为我的客户端不在管理领域。与我的常规管理员一起使用浏览器,我可以在领域之间进行更改并访问其他领域客户端。正如我所说,使用一组对特定端点的请求,我可以让我想要的东西工作,但我不知道如何使用 python-keycloak 来做到这一点。

非常感谢您的帮助。我想我已经表达得足够清楚了。

问候

最佳答案

我已经解决了这个问题。如果有人可能面临类似的问题quite similar with requets strategy

关键是注意所需的端点,如果是 admin 或 openid

serv_url = "https://{keycloak_server}/auth/"
# Getting an admin token with admin user in master realm
keycloak_admin = KeycloakAdmin(server_url=serv_url,
username='user',
password='pass',
verify=True)
# Use that admin token to connect to other realm where client is located
insights_admin = KeycloakAdmin(server_url=serv_url,
realm_name='{realm_name}', client_id='{client_name}', verify=True,
custom_headers={
'Authorization': 'Bearer ' + keycloak_admin.token.get('access_token'),
'Content-Type': 'application/json'
})
# In order to get secret_key of acknowledge client, we neeed to request
# for keycloak id, not string name
client_id = insights_admin.get_client_id("{client_name}")
# With that id, we ca get client secret
secret = insights_admin.get_client_secrets(client_id)
# Finally with that client secret, we create a OpenID object as a regular
# "user" (client_name, secret_key), this is a little misleading, due to
# here we need client_name again, not keycloak id, which is required to get
# secret_key. In both cases, client_id is variable name to both methods
# but refer to different concepts
insights_client = KeycloakOpenID(server_url=serv_url, realm_name='{realm_name}', client_id="{client_name}",
client_secret_key=secret["value"], verify=True)
# And finally we ask for a token to identify that user, considering
# KeycloakOpenID already has client_name, secret_key tuple to identify itself
# we just need to inform that we are going to use "client_credentials" instead
# of default password authentication
return insights_client.token(grant_type="client_credentials")

总结看起来很简单,但我花了很长时间才推导它。我希望有人会觉得它有趣,并且我可以为其他人节省一些时间。

关于python - 如何使用 python-keycloak 与不同领域的管理员用户一起获取 keycloak 中的客户端 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72200654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com