Keycloak自定义字段存储访问及S3凭据存储等问题咨询
问题解答
1. 在Keycloak中为用户/客户端存储S3密钥是否合理?
- 用户侧:合理但需把控安全。用户属性支持自定义键值存储,不过要避免将敏感的S3密钥直接暴露在令牌中(需通过映射器控制是否注入令牌),同时确保Keycloak自身存储已加密,仅授权人员能访问用户属性。
- 客户端侧:可行但需谨慎。客户端本身支持自定义属性(UI未显示但导出文件可见),适合存储客户端级别的S3密钥,这类属性仅管理员可通过API或导出/导入操作访问,不会随令牌下发,安全性相对可控。需确认Keycloak的审计、加密机制符合你的数据安全要求。
2. 如何在Keycloak中存储自定义字段?
用户自定义字段
- UI操作:进入用户编辑页面,切换到属性标签,直接添加键值对。
- API操作:发送
PUT请求到/admin/realms/{realm}/users/{user-id},在请求体的attributes字段中添加自定义键值(格式为{"自定义键": ["值"]})。
客户端自定义字段
- API操作:发送
PUT请求到/admin/realms/{realm}/clients/{client-id},在请求体中添加attributes字段(格式同用户属性),Keycloak会持久化存储这些属性,不受UI展示限制。 - 导出导入:导出客户端JSON文件,手动添加
attributes字段后重新导入,适合批量配置场景。 - 注意:映射器主要用于将数据注入令牌,而非持久化存储。若需将自定义字段带入令牌,可添加“用户属性”或“脚本”类型的映射器,但核心存储仍需依赖用户/客户端属性。
3. 如何通过Python客户端或REST调用获取客户端映射器信息?
REST调用方式
使用管理员权限的访问令牌,发送GET请求到以下路径:
/admin/realms/{realm-name}/clients/{client-id}/protocol-mappers/models
需确保请求携带的令牌拥有realm-management客户端的view-clients角色权限。
Python客户端方式
使用python-keycloak库(先执行pip install python-keycloak安装),示例代码:
from keycloak import KeycloakAdmin # 初始化管理员客户端 keycloak_admin = KeycloakAdmin( server_url="http://你的Keycloak地址/auth/", username="管理员账号", password="管理员密码", realm_name="目标Realm", verify=True ) # 获取客户端映射器列表 client_id = "目标客户端ID" mappers = keycloak_admin.get_client_protocol_mappers(client_id=client_id) print(mappers)
若之前无法获取,检查两点:一是管理员账号是否已分配realm-management的view-clients角色;二是确认使用的客户端ID为Keycloak内部ID(可通过get_clients()接口查询)。
内容的提问来源于stack exchange,提问作者Skaros Ilias
相关产品推荐
相关产品推荐

