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

Quarkus OIDC集成RFC7523 JWT Bearer异常,求可用实现示例

基于Quarkus + OIDC实现RFC7523的示例及问题修复

一、RFC7523的标准实现方式

Quarkus OIDC客户端原生支持JWT客户端断言(即RFC7523规范),无需完全自定义过滤器,通过配置+少量代码即可实现:

  1. OIDC客户端核心配置
    在application.properties中添加对应配置,直接指定JWT断言相关参数:
quarkus.oidc-client."x-oidc-client".auth-server-url=https://你的OIDC提供商地址/auth
quarkus.oidc-client."x-oidc-client".client-id=你的客户端ID
quarkus.oidc-client."x-oidc-client".credentials.jwt.client-assertion-type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
quarkus.oidc-client."x-oidc-client".credentials.jwt.signature.algorithm=RS256
quarkus.oidc-client."x-oidc-client".credentials.jwt.key-store-file=classpath:你的密钥库文件.jks
quarkus.oidc-client."x-oidc-client".credentials.jwt.key-store-password=密钥库密码
quarkus.oidc-client."x-oidc-client".credentials.jwt.key-password=密钥密码
  1. REST客户端接口配置
    保持你原有的注解即可,无需额外自定义过滤器:
@RegisterRestClient(configKey = "x-partner-contract")
@OidcClientFilter("x-oidc-client")
public interface PartnerContractClient {
    // 你的API调用方法定义
}

二、修复参数丢失问题

你自定义过滤器重写additionalParameters后参数丢失,是因为Quarkus OIDC客户端的默认流程会覆盖部分参数,正确的处理方式如下:

  1. 使用OidcClientRequestCustomizer定制请求
    创建请求定制器类,在令牌请求阶段注入所需参数:
@ApplicationScoped
public class JwtAssertionCustomizer implements OidcClientRequestCustomizer {
    @Override
    public void customize(OidcClientRequestContext context) {
        // 指定授权类型
        context.getTokensRequest().setGrantType(OidcConstants.CLIENT_CREDENTIALS_GRANT);
        // 添加断言类型参数
        context.getTokensRequest().addParameter("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer");
        // 生成JWT断言令牌(需结合配置的密钥签名)
        String clientAssertion = generateSignedClientAssertion(context.getOidcClientConfig());
        context.getTokensRequest().addParameter("client_assertion", clientAssertion);
    }

    private String generateSignedClientAssertion(OidcClientConfig config) {
        // 基于Quarkus SmallRye JWT API生成签名后的JWT
        return Jwt.issuer(config.getClientId())
                .audience(config.getAuthServerUrl() + "/token")
                .expiresIn(300)
                .sign();
    }
}
  1. 绑定定制器到OIDC客户端
    在application.properties中添加配置,让客户端使用你的定制器:
quarkus.oidc-client."x-oidc-client".tokens-request-customizer=JwtAssertionCustomizer
  1. 调试验证
    启动应用后,跟踪OIDC客户端的令牌请求流程,确认client_assertion_type和client_assertion参数被正确携带到令牌端点请求中。

三、关键注意事项

  • 确认你的OIDC提供商支持RFC7523的JWT客户端断言授权方式
  • 生成JWT断言时,aud(受众)必须严格匹配OIDC提供商的令牌端点URL
  • 密钥库文件需放置在classpath可访问路径下,配置的密码需与实际密钥信息一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:13