请求标头字段的Spring security kerberos大小超出服务器限制错误

时间:2018-02-15 07:41:47

标签: java spring apache spring-security kerberos

我们遇到了使用Windows身份验证登录应用程序的问题。Spring security kerberos windows authentication用于此登录过程。 然后我们的项目实施了spring security win-auth。 它适用于一些客户。但有些客户遇到如下错误。

Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.

所以serverfault中有question。我们更改了apache的 LimitRequestFieldSize 。但它没有解决我们的问题。我的问题与apache没有直接关系。所以我想在这里问我的问题。

问题与size有关。此大小取决于用户的Active目录组。 有些组可能包含其他组。

如何在不更改Active Directory的情况下减小此大小?客户太多,我们无法更改所有用户的群组。

第二点:

我们的配置文件是这样的

server:
    port: 8080
app:
    ad-domain: EXAMPLE.ORG
    ad-server: ldap://WIN-EKBO0EQ7TS7.example.org/
    service-principal: HTTP/neo.example.org@EXAMPLE.ORG
    keytab-location: /tmp/tomcat.keytab
    ldap-search-base: dc=example,dc=org
    ldap-search-filter: "(| (userPrincipalName={0}) (sAMAccountName={0}))"

我们正在使用搜索过滤器

"(| (userPrincipalName={0}) (sAMAccountName={0}))"

但示例代码中没有组过滤器。

我想在源代码上解决这个问题,如果可能的话。

有没有办法限制具有弹簧安全性的用户组?

还是其他任何想法?

此致

1 个答案:

答案 0 :(得分:1)

看看你的问题以及你写的内容,向我表明你花了很少的精力自己解决问题。你混合了很多东西,让我把它整理出来:

  1. 您的Spring Web应用程序很可能在Tomcat上运行:这不会向您发送400文本
  2. 你确实使用了Spring Sec Kerberos,这是垃圾邮件:这不会发送给你400
  3. 由于PAC数据,某个中间系统会告诉您标题大小太大:yay
  4. 可能您的客户的反向代理(Apache Web Server?)拒绝将Authorize标头转发回Tomcat。您尚未提供为LimitRequestFieldSize设置的尺寸。在最坏的情况下,您必须设置max possible token size on Windows并为Base64添加开销。启用request header logging,获取Base 64令牌并将其传递给ASN.1 decoder。如果失败,则令牌不完整,增加限制。

    我们的设置为./extra/httpd-vhosts.conf: LimitRequestFieldSize 32768,我们有很多小组,数百个小组。