如何正确配置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
相关产品推荐
相关产品推荐

