CAS禁用服务X框架选项不起作用

我已经将CAS服务器设置为多个网站的SSO解决方案。
我使用JSON文件作为服务注册表。但是,我只想禁用其中一个网站的X-Frame-Options,因为它是使用iframe在其中嵌入一些模块的旧网站。出于安全原因,我不想在其他网站上禁用X-Frame-Options。
我已成功为这些网站设置了CAS,但是,我无法为该特定旧网站禁用X-Frame-Options。

CAS版本是5.3,我使用CAS官方网站上提到的配置:
https://apereo.github.io/cas/5.3.x/installation/Configuring-Service-Http-Security-Headers.html
这是旧网站的我的JSON文件:

{
  "@class": "org.apereo.cas.services.RegexRegisteredService","serviceId": "^https://my-internal-site.com.*","name": "mysite","id": 1001,"evaluationOrder": 5,"attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnmappedAttributeReleasePolicy","authorizedToReleaseProxyGrantingTicket": true,"allowedAttributes": {
      "@class": "java.util.TreeMap","username": "username","personUuid": "personUuid"
    }
  },"proxyPolicy": {
    "@class": "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy","pattern": "^https://.+"
  },"properties" : {
    "@class" : "java.util.HashMap","httpHeaderEnableXFrameOptions" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty","values" : [ "java.util.HashSet",[ "false" ] ]
    }
  }
}

我尝试通过CAS仪表板查看配置,发现CAS已识别我的配置,并且可以在“ mysite”中看到httpHeaderEnableXFrameOptions的配置。
但是,我仍然无法为旧版网站(mysite)禁用X-Frame-Options。
我的配置有问题吗?还是我需要设置其他配置才能仅针对该旧网站禁用X-Frame-Options?
谢谢

a932182372 回答:CAS禁用服务X框架选项不起作用

我已经为您研究了代码,看到了确定 X-Frame-Options 是否有效的这两个位置:

将两个来源合并在一起并进行一些释义,我们得到了:

X-Frame-Options 是启用还是禁用的逻辑

    @Override
    protected void decideInsertXFrameOptionsHeader(final HttpServletResponse httpServletResponse,final HttpServletRequest httpServletRequest) {
        // Check A
        if (shouldHttpHeaderBeInjectedIntoResponse(httpServletRequest,RegisteredServiceProperties.HTTP_HEADER_ENABLE_XFRAME_OPTIONS)) {
            final String xFrameOptions = getStringProperty(httpServletRequest,RegisteredServiceProperties.HTTP_HEADER_XFRAME_OPTIONS);
            super.insertXFrameOptionsHeader(httpServletResponse,httpServletRequest,xFrameOptions);
        } else {
             // Check B
             if (!this.enableXFrameOptions) {
                 return;
             }
             insertXFrameOptionsHeader(httpServletResponse,httpServletRequest);
        }
    }

分析逻辑

有两种方法可以影响是否启用xframe选项的结果:

  1. this.enableXFrameOptions ,它是here中的cas.httpWebRequest.header.xframe
  2. 服务中的httpHeaderEnableXFrameOptions ,已在问题中链接

如果我们创建一个表格来显示设置以上两个值将如何影响显示XFrameOptions的最终结果:

+--------------------------------+-------------------------------------------+---------------------+
|  enableXFrameOptions property  |  httpHeaderEnableXFrameOptions in service |  Is XFrame Enabled? |
+--------------------------------------------------------------------------------------------------+
|         true                   |                 true                      |        true         |
+--------------------------------------------------------------------------------------------------+
|         false                  |                 true                      |        true         |
+--------------------------------------------------------------------------------------------------+
|         true                   |                 false                     |       *true*        |
+--------------------------------------------------------------------------------------------------+
|         false                  |                 false                     |        false        |
+--------------------------------+-------------------------------------------+---------------------+

这就是为什么在您设置时:

  1. this.enableXFrameOptions = true(默认情况下)
  2. 正在使用的httpHeaderEnableXFrameOptions =假

结果仍然为 true ,因此您在结果中看到的结果。

解决方案

一种愚蠢的解决方案(未经测试)是将cas.httpWebRequest.header.xframe设置为false, 并确保您的所有服务都标有httpHeaderEnableXFrameOptions = true,当然希望旧版网站

另一种解决方案是对CAS进行自定义更改以修改此行为

或者也许有其他解决方案,如果可能的话,其他解决方案也可以帮助:)

本文链接:https://www.f2er.com/3045313.html

大家都在问