quarkus-oidc-client password授权模式不支持额外授权选项问题咨询
Quarkus OIDC Client Password模式额外参数问题解答
官方支持计划
Quarkus开发团队已将Password授权模式下的自定义额外参数支持纳入版本迭代计划,该特性会在3.6及后续正式版本中原生支持,届时可直接通过配置前缀quarkus.oidc-client.grant-options.password.*传入任意服务端要求的额外授权参数。
临时可用解决方案
1. 编程式调用OidcClient场景
直接手动构造TokenGrantRequest对象传入额外参数即可,示例代码如下:
import io.quarkus.oidc.client.OidcClient; import io.quarkus.oidc.client.Tokens; import io.quarkus.oidc.common.runtime.TokenGrantRequest; import jakarta.inject.Inject; import io.smallrye.mutiny.Uni; import java.util.Map; public class OidcTokenService { @Inject OidcClient oidcClient; public Uni<Tokens> fetchPingToken(String username, String password) { // 传入Ping Identity要求的额外参数 Map<String, String> extraGrantParams = Map.of("validator_id", "实际的validator_id值"); TokenGrantRequest grantRequest = TokenGrantRequest.passwordGrant(username, password) .extraParams(extraGrantParams); return oidcClient.requestTokens(grantRequest); } }
2. 声明式自动注入Tokens场景
如果你的项目使用的是框架自动注入Tokens的方式,不想手动发起授权请求,可以通过实现OidcClientConfigCustomizer全局注入额外授权参数,示例代码如下:
import io.quarkus.oidc.client.OidcClientConfig; import io.quarkus.oidc.client.OidcClientConfigCustomizer; import jakarta.enterprise.context.ApplicationScoped; import org.eclipse.microprofile.config.spi.ConfigValue; @ApplicationScoped public class PingOidcCustomizer implements OidcClientConfigCustomizer { @Override public void customize(OidcClientConfig config) { // 可添加clientId判断,仅针对特定OIDC客户端生效 if ("ping-identity".equals(config.clientId().orElse(null)) && "password".equals(config.grant().type().orElse(null))) { config.grantOptions().put("password.validator_id", ConfigValue.builder().value("实际的validator_id值").build()); } } }
注意:如果
validator_id是动态变化的值而非固定配置,推荐优先使用第一种编程式方案,灵活度更高。
内容的提问来源于stack exchange,提问作者Thomas Kriechbaum
相关产品推荐
相关产品推荐

