如何使用Keycloak将查询参数转发给外部身份提供商?

问题描述

在Keycloak中创建身份提供者(IdP)时,有一个选项可用于将查询参数转发到外部IDP。如何使用?

enter image description here

我想将launch参数转发到外部IDP。我在Keycloak配置页面launch字段中提到了Forwarded Query Parameters。我在受Keyclaok保护的locahost:9090上使用了一个应用。当我访问http://localhost:9090?launch=abc时,此参数未转发到外部IDP。我将keycloak-spring-boot-starter用于我们的Spring Boot应用程序。

还从code of Keycloak开始,我发现转发参数附加了一些前缀,即client_request_param_,所以我尝试使用http://localhost:9090?client_request_param_launch=abc,但没有运气。

AuthorizationEndpoint.LOGIN_SESSION_NOTE_ADDITIONAL_REQ_ParaMS_PREFIX = client_request_param_

String forwardParameterConfig = getConfig().getForwardParameters() != null ? getConfig().getForwardParameters(): "";
List<String> forwardParameters = Arrays.asList(forwardParameterConfig.split("\\s*,\\s*"));
for(String forwardParameter: forwardParameters) {
    String name = AuthorizationEndpoint.LOGIN_SESSION_NOTE_ADDITIONAL_REQ_ParaMS_PREFIX + forwardParameter.trim();
    String parameter = request.getAuthenticationSession().getClientNote(name);
    if(parameter != null && !parameter.isEmpty()) {
        uriBuilder.queryParam(forwardParameter,parameter);
    }
}

P.S:我正在使用Keycloak 7.0.0。

解决方法

我在授权请求中设置 acr_values parameters 时遇到了同样的问题。我通过将参数直接放在授权端点路径中解决了它:

https://YOUR_DOMAIN/oauth/authorize?acr_values=MY_VALUES&

我没有进行太多调查,为什么转发查询参数没有按预期工作(我使用的是 Keycloak 14.0.0)。很高兴看到有人稍后在这里给出一些解释。

,

我猜测转发的查询参数是附加到初始代码流请求的非 OIDC 参数 - 如果在该 IdP 的列表中指定了这些参数,则这些参数会被转发到 IdP。