首页 > 解决方案 > 解码 Keycloak JWT 令牌

问题描述

我正在尝试验证(并从中读取角色)JWT 令牌。遗憾的是,由于我的整体应用程序架构,我无法使用任何适配器或自动配置。

像任何其他 JWT 令牌一样解码令牌是没有问题的,但我想知道是否有来自 Keycloak 的库来存档这个目标。(例如,只需将令牌解析为 KeycloakJWTToken 之类的东西,并通过从 Keycloak Server 获取秘密来验证它)

有什么好用的客户端吗?

标签: keycloak

解决方案


Keycloak 访问令牌确实是 JWT 令牌。因此,您可以充分利用现有的 JWT 库,包括 Keycloak 官方文档中所述的验证:

如果您需要手动验证 Keycloak 颁发的访问令牌,您可以调用 Introspection Endpoint。这种方法的缺点是您必须对 Keycloak 服务器进行网络调用。如果您同时有太多验证请求,这可能会很慢并且可能会使服务器超载。Keycloak 颁发的访问令牌是使用 JSON Web 签名 (JWS) 进行数字签名和编码的 JSON Web 令牌 (JWT)。因为它们是以这种方式编码的,所以这允许您使用发布领域的公钥在本地验证访问令牌。您可以在验证代码中对领域的公钥进行硬编码,也可以使用嵌入在 JWS 中的密钥 ID (KID) 的证书端点来查找和缓存公钥。根据您编码的语言,

此外,在 Java EE 中,使用 Keycloak Java 适配器,角色通常映射到用户Principal并且允许isUserInRole(). 这是目标之一。也可以将Principalfrom 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


推荐阅读