You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Keycloak如何将客户端凭证放在请求体中发送

解决方案

核心逻辑

Keycloak Spring Boot Starter的客户端凭证传递逻辑由ClientCredentialsProvider接口的实现类控制,默认实现ClientIdAndClientCredentialsProvider会将凭证放在Authorization请求头中传输,你可以通过自定义该接口的实现,替换默认逻辑来满足定制版Keycloak的要求。

具体实现步骤

  • 自定义ClientCredentialsProvider实现类
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.authentication.ClientCredentialsProvider;
import org.keycloak.representations.adapters.config.AdapterConfig;
import javax.ws.rs.core.Form;
import java.util.Map;

public class FormBodyClientCredentialsProvider implements ClientCredentialsProvider {
    @Override
    public String getId() {
        // 自定义提供者的唯一标识,后续配置要用到
        return "form-body";
    }

    @Override
    public void init(AdapterConfig adapterConfig, Object o) {
        // 无额外初始化需求可留空
    }

    @Override
    public void setClientCredentials(KeycloakDeployment keycloakDeployment, Map<String, String> requestHeaders, Form form) {
        // 不在请求头添加凭证
        // 将客户端凭证写入请求体form参数
        form.param("client_id", keycloakDeployment.getResourceName());
        form.param("client_secret", keycloakDeployment.getResourceCredentials().get("secret").toString());
    }
}
  • 注册自定义实现类
    在项目resources/META-INF/services目录下新建名为org.keycloak.adapters.authentication.ClientCredentialsProvider的文件,文件内写入自定义实现类的全限定名,示例:
com.yourproject.config.FormBodyClientCredentialsProvider
  • 修改配置启用自定义提供者
    在application.yml或application.properties中添加如下配置:
keycloak:
  credentials:
    provider: form-body # 和自定义实现类getId()返回的标识保持一致

验证方法

项目启动后触发令牌申请请求,查看请求报文即可看到client_id、client_secret已放在请求体中传输,请求头不再携带Basic认证的Authorization头。

适配说明

如果使用Keycloak 17+的Quarkus版对应Starter,仅需调整相关类的包路径即可,核心逻辑不变。

内容的提问来源于stack exchange,提问作者mifol68042

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:06:08