keycloak - 解码 Keycloak JWT 令牌
问题描述
我正在尝试验证(并从中读取角色)JWT 令牌。遗憾的是,由于我的整体应用程序架构,我无法使用任何适配器或自动配置。
像任何其他 JWT 令牌一样解码令牌是没有问题的,但我想知道是否有来自 Keycloak 的库来存档这个目标。(例如,只需将令牌解析为 KeycloakJWTToken 之类的东西,并通过从 Keycloak Server 获取秘密来验证它)
有什么好用的客户端吗?
解决方案
Keycloak 访问令牌确实是 JWT 令牌。因此,您可以充分利用现有的 JWT 库,包括 Keycloak 官方文档中所述的验证:
如果您需要手动验证 Keycloak 颁发的访问令牌,您可以调用 Introspection Endpoint。这种方法的缺点是您必须对 Keycloak 服务器进行网络调用。如果您同时有太多验证请求,这可能会很慢并且可能会使服务器超载。Keycloak 颁发的访问令牌是使用 JSON Web 签名 (JWS) 进行数字签名和编码的 JSON Web 令牌 (JWT)。因为它们是以这种方式编码的,所以这允许您使用发布领域的公钥在本地验证访问令牌。您可以在验证代码中对领域的公钥进行硬编码,也可以使用嵌入在 JWS 中的密钥 ID (KID) 的证书端点来查找和缓存公钥。根据您编码的语言,
此外,在 Java EE 中,使用 Keycloak Java 适配器,角色通常映射到用户Principal并且允许isUserInRole()
. 这是目标之一。也可以将Principal
from the转换SecurityContext
为 a KeycloakPrincipal
,然后依次从中获取 a KeycloakSecurityContext
。使用 ,KeycloakSecurityContext
您可以访问 ID 和 Access 令牌(如果适用),并且可以读取它们的属性、属性和声明。
请注意,使用Keycloak UI来“评估”您的令牌也是一种很好的做法,而且非常有用。例如,您可以在Client Scopes
选项卡(在 下)中查看生成的令牌,并在客户端的“授权”选项卡(在EvaluateEvaluate
下)评估您的策略和权限。参照。https://www.keycloak.org/docs/latest/server_admin/#_client_scopes_evaluate
这可能是设置客户端时调试和测试的最佳方式。
如果您在“评估”屏幕中选择用户,则会生成以下示例数据:
- 生成的访问令牌 (...)
- 生成的 ID 令牌 (...)
- 生成的用户信息 (...)
所有示例都是为特定用户生成并为特定客户端发布的,具有指定的范围参数值。这些示例包括使用的所有声明和角色映射。
来源: https ://www.keycloak.org/docs/latest/server_admin/#generating-example-tokens-and-user-info
推荐阅读
- javascript - 如何从包含多个 URL 的字符串中正确隔离和存储 Google 文件 ID?
- javascript - 图像 onLoad 处理程序从未在 Jest 中调用
- ab-initio - 从头算图到 Java 的转换
- html - 我没有得到下拉菜单
- vb.net - Is there a way to change the text displayed in a DatePicker? Instead of "Select a date", show something else?
- ios - 如何解决 No + [RCTConvert AIR MapCoordinate Array] 错误:找到函数。在 iOS 上反应原生地图
- azure-active-directory - AzureAd 组和用户的 Webhook 订阅不起作用
- marko - markojs 中的可重复属性标签
- javascript - 循环错误复选框值的 JavaScript 表
- weblogic - weblogic.Admin:找不到命令