14.7. 客户端身份验证


当授权客户端需要发送后端请求时,它需要针对红帽构建的 Keycloak 服务器进行身份验证。默认情况下,可以通过三种方式对客户端进行身份验证:客户端 ID 和客户端机密、使用签名 JWT 的客户端身份验证,或者使用客户端机密通过签名 JWT 进行客户端身份验证。

14.7.1. 客户端 ID 和客户端 Secret

这是 OAuth2 规范中描述的传统方法。客户端有一个 secret,需要对客户端和红帽构建的 Keycloak 服务器都已知。您可以在红帽构建的 Keycloak 管理控制台中为特定客户端生成 secret,然后将此 secret 粘贴到应用程序端的 keycloak.json 文件中:

"credentials": {
    "secret": "19666a4f-32dd-4049-b082-684c74115f28"
}
Copy to Clipboard Toggle word wrap

14.7.2. 使用 Signed JWT 进行客户端身份验证

这基于 RFC7523 规格。它以这种方式工作:

  • 客户端必须具有私钥和证书。对于授权客户端,这可通过传统的 密钥存储文件 提供,该文件可以在客户端应用的 classpath 上或文件系统上的某个位置使用。
  • 在身份验证过程中,客户端会生成 JWT 令牌并使用其私钥进行签名,并将其发送到 client_assertion 参数中特定请求中的 Keycloak 的红帽构建。
  • 红帽构建的 Keycloak 必须有客户端的公钥或证书,以便它可以验证 JWT 上的签名。在 Red Hat build of Keycloak 中,您可以为客户端配置客户端凭证。首先,您可以选择 Signed JWT 作为在管理控制台 选项卡中 验证客户端的方法。然后您可以在 Keys 选项卡中选择这些方法之一:

    • 配置红帽构建的 Keycloak 可下载客户端的公钥的 JWKS URL。这个选项是最灵活的,因为客户端可以随时轮转其密钥,红帽构建的 Keycloak 始终根据需要下载新密钥,而无需更改配置。换句话说,当看到由未知 kid (Key ID)签名的令牌时,Red Hat build of Keycloak 会下载新密钥。但是,您将需要在某种地方公开 JWKS 格式的公钥,以便供服务器使用。
    • 上传客户端的公钥或证书,可以是 PEM 格式,可以是 JWK 格式,或从密钥存储上传。使用此选项时,公钥被硬编码,必须在客户端生成新的密钥对时更改。如果您没有自己的密钥存储可用,则甚至可以从红帽构建的 Keycloak 管理控制台生成自己的密钥存储。此选项是使用授权客户端的最简单。

要使用此方法设置,您需要在 keycloak.json 文件中编写类似如下的代码:

"credentials": {
  "jwt": {
    "client-keystore-file": "classpath:keystore-client.jks",
    "client-keystore-type": "JKS",
    "client-keystore-password": "storepass",
    "client-key-password": "keypass",
    "client-key-alias": "clientkey",
    "token-expiration": 10
  }
}
Copy to Clipboard Toggle word wrap

使用此配置时,密钥存储文件 keystore-client.jks 必须在应用的类路径中使用授权客户端。如果不使用前缀 classpath: 您可以指向运行客户端应用程序的文件系统上的任何文件。

这与带有 Signed JWT 的客户端身份验证相同,但使用客户端 secret 而不是私钥和证书。

客户端有一个 secret,需要使用授权客户端和红帽构建的 Keycloak 服务器对应用程序进行已知。您可以选择 Signed JWT with Client Secret 作为在 Admin Console 的 Credentials 选项卡中验证客户端的方法,然后将此 secret 粘贴到应用程序端的 keycloak.json 文件中:

"credentials": {
  "secret-jwt": {
    "secret": "19666a4f-32dd-4049-b082-684c74115f28",
    "algorithm": "HS512"
  }
}
Copy to Clipboard Toggle word wrap

"algorithm"字段使用 Client Secret 指定 Signed JWT 的算法。它需要是以下值之一:HS256、HS384 和 HS512。详情请参阅 JSON Web 算法(JWA)

此 "algorithm" 字段是可选的;如果 keycloak.json 文件中不存在 "algorithm" 字段,则会自动应用 HS256。

14.7.4. 添加您自己的客户端验证方法

您还可以添加自己的客户端验证方法。您需要实施客户端和服务器端提供商。如需了解更多详细信息,请参阅 服务器 开发人员指南中的 身份验证 SPI 部分。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat