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

如何正确配置Quarkus以JWT为凭证登录Salesforce?

Quarkus OIDC JWT授权流对接Salesforce的正确配置方式

我在Quarkus应用中尝试用JWT作为Bearer令牌登录Salesforce,但对OIDC的众多配置选项感到困惑。已知官方已经支持Salesforce的oauth_jwt_flow,且有对应的OIDC客户端JWT授权grant支持,但我不确定该用哪些OIDC配置属性来实现预期功能。

我目前已经实现了功能,但总觉得方式不对。我的application.properties配置如下:

quarkus.oidc-client.auth-server-url=https://test.salesforce.com
quarkus.oidc-client.discovery-enabled=false
quarkus.oidc-client.token-path=/services/oauth2/token
quarkus.oidc-client.client-id=XXXXXX
quarkus.oidc-client.grant.type=jwt
#quarkus.oidc-client.credentials.jwt.source=bearer
quarkus.oidc-client.credentials.jwt.lifespan=3600
quarkus.oidc-client.credentials.jwt.key=-----BEGIN PRIVATE KEY-----\nXXXX\n-----END PRIVATE KEY-----
quarkus.oidc-client.credentials.jwt.audience=https://test.salesforce.com

smallrye.jwt.sign.key=-----BEGIN PRIVATE KEY-----\nXXXXXX\n-----END PRIVATE KEY-----

我通过调用String accessToken = getAccessToken().await().indefinitely();获取访问令牌,相关代码如下:

public String generateJwt() {
    Map<String, Object> claims = new HashMap<>();
    claims.put("sub", "XXXXXX");
    claims.put("aud", "https://test.salesforce.com");
    claims.put("iss", "XXXXXX");
    claims.put("exp", System.currentTimeMillis() / 1000 + 3600);

    return Jwt.claims(claims)
            .jws()
            .sign();
}


public Uni<String> getAccessToken() {
    Map<String, String> params = new HashMap<>();
    params.put("assertion", generateJwt());
    return oidcClient.getTokens(params)
            .onItem().transform(Tokens::getAccessToken);
}

现在的问题是:我需要重复配置私钥(quarkus.oidc-client.credentials.jwt.key和smallrye.jwt.sign.key),而且必须在claims里指定client id作为sub,但这个值已经在quarkus.oidc-client.client-id中配置过了。有没有通过配置就能实现该功能的正确方式?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:18