为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Keycloak 身份验证之前调用 javax.servlet.Filter

如何在 Keycloak 身份验证之前调用 javax.servlet.Filter

至尊宝的传说 2021-05-30 09:58:15
我们已经使用 resteasy 开发了一个 REST API。(部署在 Wildfly 10 中)基本上,这些 REST API 是从另一个应用程序内部调用的,并且端点使用 keycloak 进行保护。但是一个端点暴露给外部方(该端点也使用 keycloak 进行保护)。但是由于外部方无法提供 Keycloak 身份验证代码,我们已经完成了一个实现,其中客户端使用应用程序生成的 auth_key 进行注册,并且客户端将使用该 auth_key 调用端点。然后在一个 web 过滤器(一个 javax.servlet.Filter)中,使用 tha auth_key 我们得到相关的 keycloak authntication Bearer 令牌。如果需要(例如:令牌过期),我们也调用 Keycloak 服务器。收到后,我们将该授权令牌添加到 Web 过滤器内的 httpRequest 并继续执行端点应用程序。但问题是,KeyCloak 身份验证在 Web Filter 之前调用。我正在寻找的是“如何在 keycloak 身份验证之前调用 Web 过滤器?”
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您是否尝试过更改 web.xml 中元素的顺序(例如,将过滤器定义放在servlet 定义之前)?

不确定它会起作用,但文档说:“链中过滤器的顺序与过滤器映射出现在 Web 应用程序部署描述符中的顺序相同

对于 servlet 和过滤器之间的顺序,这个原则也可能适用......


查看完整回答
反对 回复 2021-06-02
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我知道这是 2 岁,但我找到了解决这个问题的解决方案:将您的适配器更改为 servlet 过滤器,我的是 jboss/wildfly,然后添加到过滤器下方的 web.xml 以更改请求或响应。在 jboss/wildfly 的情况下,身份验证发生在阀门中,因此身份验证发生在任何过滤器执行之前。完成此操作后,您可以控制 keycloak 何时开始工作并将过滤器放在它之前。


web.xml


<filter>

        <filter-name>Keycloak Filter</filter-name>

        <filter-class>org.keycloak.adapters.servlet.KeycloakOIDCFilter</filter-class>

</filter>

    <filter-mapping>

        <filter-name>Keycloak Filter</filter-name>

        <url-pattern>/restricted/*</url-pattern>

        <url-pattern>/restricted/</url-pattern>

</filter-mapping>

将适当的版本添加keycloak-servlet-filter-adapter到您的 pom,并从 web.xml 中删除所有其他安全约束、身份验证方法等。


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信