在 Keycloak 中扩展令牌:使用扩展令牌模式自定义令牌数据
2024-03-01 03:30:41
使用扩展令牌模式扩展 Keycloak 令牌
引言
在现代应用程序开发中,自定义令牌数据对于提供针对性的用户体验和增强安全性至关重要。然而,使用基本 Keycloak 令牌模式可能不足以满足特定的数据要求。本文将深入探讨如何利用扩展令牌模式在 Keycloak 令牌中注入自定义数据。
问题
如果你需要在 Keycloak 令牌中包含用户特定数据,但基本信息无法满足你的需求,那么你需要超越修改后的插件。使用扩展令牌模式,你可以动态地将自定义数据附加到令牌中,从而为你的应用程序提供更大的灵活性。
解决方案:扩展令牌模式
扩展令牌模式为在 Keycloak 令牌中包含自定义数据提供了安全且高效的方法。它允许你创建自己的令牌提供程序,该提供程序负责根据请求的参数动态生成数据。
步骤:
-
创建扩展令牌提供程序: 实现
org.keycloak.authorization.client.util.AuthorizationClientUtil
接口,创建自定义令牌提供程序类。 -
配置 Keycloak:
- 创建一个包含自定义数据键的客户端范围。
- 添加一个扩展类型协议映射器,并指定自定义令牌提供程序。
-
请求带有自定义数据的令牌: 在请求令牌时,包括客户端范围和自定义数据键作为附加参数。
-
在扩展令牌提供程序中获取自定义数据: 在
setClaim
方法中,使用AuthorizationContext
获取自定义数据并将其添加到令牌中。
优点
- 动态控制: 允许你根据请求参数动态控制自定义数据。
- 安全: 遵循 Keycloak 的安全标准,防止数据泄露和篡改。
- 可扩展: 提供了扩展 Keycloak 令牌功能的灵活方法。
示例
考虑一个场景,你需要在令牌中包含用户的首选语言。按照上述步骤,你可以:
- 创建一个名为
CustomLanguageProvider
的扩展令牌提供程序。 - 在 Keycloak 中创建一个客户端范围
custom-language-scope
并添加一个扩展协议映射器,指向CustomLanguageProvider
。 - 请求令牌时,包括
scope=custom-language-scope&language=en
参数。 - 在
CustomLanguageProvider
的setClaim
方法中,获取自定义语言并将其添加到令牌中。
常见问题解答
1. 我可以在令牌中存储任何类型的数据吗?
答:可以,只要它符合 Keycloak 要求的 JSON 格式。
2. 我可以使用扩展令牌模式替换基本令牌模式吗?
答:不,扩展令牌模式补充了基本模式,允许你在需要时添加额外的自定义数据。
3. 如何保护自定义数据免遭未经授权的访问?
答:自定义数据仅存储在令牌中,在传输过程中使用 TLS/SSL 加密。
4. 是否可以将扩展令牌模式与其他 Keycloak 功能结合使用?
答:是的,扩展令牌模式可以与 Keycloak 的其他功能配合使用,例如客户端凭证授权。
5. 如何在生产环境中使用扩展令牌模式?
答:在生产环境中使用扩展令牌模式之前,请确保在安全受控的环境中进行彻底测试和验证。