将 KeycloakOIDCFilter 与 Spark UI 结合使用 - 无法配置

Bra*_*mon 5 java servlet-filters apache-spark openid-connect keycloak

我们正在尝试将KeycloakOIDCFilter其用作 Apache Spark UI 过滤器。然而,我们正在努力配置它KeycloakOIDCFilter本身。

我们在spark-defaults.conf中有:

spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
Run Code Online (Sandbox Code Playgroud)

该过滤器已成功获取,并且 Spark 主日志显示此过滤器已应用于所有 URL 路由。

我们已经在 Keycloak 管理控制台中生成了一个客户端配置文件,该文件已生成一个keycloak-oidc.json.

但我们如何讲述KeycloakOIDCFilter这些信息呢?

来自 Spark文档

还可以通过设置spark.<class name of filter>.param.<param name>=<value> 以下形式的配置条目在配置中指定过滤器参数:

spark.ui.filters=com.test.filter1
spark.com.test.filter1.param.name1=foo
spark.com.test.filter1.param.name2=bar
Run Code Online (Sandbox Code Playgroud)

在我们的例子中,这似乎是:

spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.<name>=<value>
Run Code Online (Sandbox Code Playgroud)

但是,KeycloakOIDCFilter Java 类只有两个构造函数。一种根本不带任何参数,一种带KeycloakConfigResolver.

Keycloak Java servlet 过滤器适配器文档仅讨论web.xml在配置 Spark 的情况下不适用的内容。

那么我们如何正确配置/指向KeycloakOIDCFilterservlet 过滤器的参数呢?


更新:我们已经确定spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.file可用于指向配置文件,但Spark 似乎不使用 SessionManager,从而导致可能无法解决的单独错误。

jcc*_*ero 2

我还没有测试该解决方案,但是根据您引用的 Keycloak 和 Spark 文档以及KeycloakOIDCFilter的源代码,假设您在文件系统中使用文件,以下配置可以工作:

spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.file=/path/to/keycloak-oidc.json
Run Code Online (Sandbox Code Playgroud)

或者,如果您的配置可作为 Web 应用程序资源通过 访问,getServletContext().getResourceAsStream(...)而不是文件:

spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.path=/WEB-INF/keycloak-oidc.json
Run Code Online (Sandbox Code Playgroud)

请注意,它们表明过滤器参数也可以在配置中指定:afaik,这并不意味着过滤器应该有任何特殊的构造函数或类似的东西。

此配置由以下命令执行addFilters

spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.file=/path/to/keycloak-oidc.json
Run Code Online (Sandbox Code Playgroud)

添加过滤器

spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.path=/WEB-INF/keycloak-oidc.json
Run Code Online (Sandbox Code Playgroud)

JettyUtilsSpark UI源代码中类中的方法。