📅  最后修改于: 2023-12-03 15:22:24.190000             🧑  作者: Mango
若你正在使用 Keycloak 来管理用户身份验证和授权,那么你可能需要从数据库或 API 中检索到已认证用户的数据。本文将介绍如何使用接收到的访问令牌来检索 Keycloak 用户数据。
在接入 Keycloak API 前,请确保你已经完成身份验证并获得一个有效的访问令牌。访问令牌以 JWT 格式存储,其中包含了用户的身份信息以及一些访问权限。
首先,你需要将访问令牌解码并读取其中的信息。可以使用下面的代码片段来解码 JWT:
import jwt
def decode_token(token):
decoded = jwt.decode(token, verify=False)
return decoded
解码过后,你应该能够得到如下格式的数据:
{
"jti": "f1b3cb12-9c8e-426b-8651-8703e7d1a974",
"exp": 1630668517,
"iat": 1630664917,
"iss": "http://localhost:8080/auth/realms/demo",
"aud": "account",
"sub": "1a5e6b6c-b416-44db-9270-03770db770a9",
"typ": "Bearer",
"azp": "demo-app",
"session_state": "c8bc2494-2b91-4f1f-b77b-0edc70e50e10",
"acr": "1",
"allowed-origins": [
"http://localhost:8080"
],
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
"scope": "openid email profile"
}
其中,sub
字段保存了用户的唯一标识,可以用来从数据库中检索出用户数据。接下来,你可以使用 Keycloak 的 REST API 来检索用户数据。这需要你了解 Keycloak API 的使用方式,在此不再阐述。
在 API 的调用过程中,你需要将访问令牌传递给 Keycloak 以验证用户的身份。下面是一个示例代码:
import requests
def get_user_data(token, user_id):
headers = {'Authorization': f'Bearer {token}'}
url = f'http://localhost:8080/auth/realms/demo/users/{user_id}'
response = requests.get(url, headers=headers)
return response.json()
此代码会向 Keycloak 的 /users
API 发送一个 GET 请求,其中包括了访问令牌以及要检索的用户 ID。注意到我们在 headers 中传递了访问令牌,因此可以通过 API 获得访问鉴权。
如果一切正常,在 API 的响应中,你可以获得用户的详细信息,例如用户名、电子邮件和角色列表等:
{
"id": "1a5e6b6c-b416-44db-9270-03770db770a9",
"createdTimestamp": 1630664917605,
"username": "john",
"enabled": true,
"totp": false,
"emailVerified": false,
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"attributes": {},
"disableableCredentialTypes": [
"password"
],
"requiredActions": [],
"notBefore": 0,
"access": {
"manageGroupMembership": true,
"view": true,
"mapRoles": true,
"impersonate": false,
"manage": false
}
}
这样,你就可以通过接收到的访问令牌,从 Keycloak 中检索出已认证用户的数据了。
使用接收到的访问令牌,可以方便地实现对 Keycloak 数据库或 API 的访问,以获取已认证用户的数据。我们在本文中介绍了如何解码 JWT、使用 API 以及传递访问令牌以获取 Keycloak 用户数据。如果你正在进行 Keycloak 的开发,希望对本文中的代码片段进行修改或扩展,以满足你的需求。