keycloak - 如何在访问令牌中指定特定于客户端的自定义属性
问题描述
我有一个 Keycloak 设置,并且正在使用 client_credential 流为数千个后端创建访问令牌。
我想在访问令牌中包含另一个自定义字段,所以在exp
等旁边,我想有一个 field publicKey
。该字段对于每个客户端都是特定且唯一的。
使用Keycloak可以吗?
编辑:澄清我有很多后端,每个后端都有一个特定和独特的publicKey
解决方案
我假设您在 claim 中有一个硬编码的值publicKey
。如果是这样,这就足够了:您创建一个发布令牌的自定义范围。因此,假设您有一个 Client Backend,它希望将用户令牌交换为 serviceaccount-token 以联系下游服务client_credentials_service,并且此 serviceaccount-token 应该具有publicKey
内部属性,这是您可以做到的一种方法:
在这里,您可以将新范围作为默认范围或可选范围添加到客户端。可选意味着,在您向 kcs 令牌端点发出的请求以通过 client_credentials 流获取令牌时,您必须添加 scope=publicKeyScope 参数。例如像这样:
curl --location --request POST 'http://localhost:8080/auth/realms/yourRealm/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=client_credentials_service' \
--data-urlencode 'client_secret=your-secret' \
--data-urlencode 'scope=email publicKeyScope' \
--data-urlencode 'grant_type=client_credentials'
当它被添加为默认值时,您不必显式地将所需的范围添加到请求中。
只要您不将此范围(或相应的映射)添加到另一个客户端,只有通过客户端凭据流获得的 client_credentials_service 令牌才会包含此声明。
推荐阅读
- excel - 如果 Excel 2016 中的计算公式的条件需要超过 64 个,我该怎么办
- node.js - 如何删除顶部的列表视图空白?
- php - 检查 max_execution_time 和 memory_limit 是否设置为所需值
- python-3.x - Scikit-learn 标准定标器
- c# - 我有一个对象列表,但我找不到整理代码的方法。我正在尝试更新 C# 中特定索引处的对象
- android - 在我的 MainActivity 代码中更改微调器的大小
- python - PythonAnywhere 上 Flask 的日志记录格式
- android - Firebase - 获取所有孩子并添加到 ListView
- android - Visual Studio 2013 的目标 Android 版本中未显示已安装的 API 版本 28 (Pie)
- dictionary - TypeError:无法调用 null 的方法“getRange”。(第 25 行,文件“代码”)