2015-06-04 79 views
5

我对Spring Security有一个希望很快的问题。春季安全Kerberos链接基本

我正在寻找一种将安全性集成到我们的应用程序中的解决方案,该应用程序提供SSO但HTTP基本功能。

我们的系统中的一个自动化部分只能支持基本认证,而且我们非常关注它。目前我们的目标是为我们的SSO解决方案使用Kerberos,然后还支持基本(非常有限的用法)。所有这些都将保护通过resteasy运行的RESTful Web服务。

在春季安全中,Kerberos和BASIC链接在一起的解决方案中是否有人看到任何固有的不可能性?我们在使用WildFly时遇到了问题,并且无法支持多种不同的身份验证方法,这些身份验证方法在握手时使用HTTP响应代码。

感谢输入

回答

5

由于这个问题是有点困难,我假设你已经熟悉展示了如何配置Kerberos身份验证与表单身份验证作为后备的Spring Security Kerberos samples。 我没有证据表明它会起作用,但我认为你应该可以用基本身份验证链接你的kerberos身份验证而没有任何问题。我分享这个我的想法......

思想1:FilterChains

支持多张认证方法的关键是要正确设置认证过滤器的顺序。 如果顺序错误,客户端可能会挂起基本身份验证,并且可能永远不会到达Kerberos身份验证筛选器,因为浏览器的基本身份验证对话框会弹出。这可能取决于Spring的基本身份验证提供程序和过滤器是如何实现的。无论如何,如果订单是正确的,kerberos过滤器(基本认证过滤器)后的链中过滤器将开始其工作。

思考2:Kerberos的身份验证不应该打破基本身份验证

浏览器应该用对待与基本身份验证提供者的通信不同的Kerberos服务提供者的通信,因为协议是不同的。 SAML通信在it's own namespace中运行,因此我认为它不应该影响基于HTTP标头中授权元素的基本身份验证通信。

编辑:即使关于命名空间不打在浏览器行为的任何角色的假设,步骤6 sequence diagram将是一个关键点。当筛选器链接正确时,Spring应该返回一个401响应,如401 - Access denied - WWW-authenticate - Basic realm = "your domain"这将强制您的浏览器进入基本身份验证。

思想3:SPNEGO协商Spring Security的Kerberos的

Spring Security的Kerberos文档是实际上可以建立在这些想法中的Spnego configuration。这也可以在样本中看到,在第49和50行this WebSecurityConfig.java

如果您遇到麻烦,我会感到惊讶。

最后一个思想

如果没有要求强迫你做一个基本的身份验证,我会建议不使用它。最好使用基于令牌的身份验证。即使我不完全同意这个博客的所有细节,它也会解释why basic auth shouldn't be used,如果你可以避免的话。

+0

谢谢米卡。这最终是成功的。 – TheNorthWes

2

我强烈建议你阅读Mika的答案。它做得非常好,给了我前进的信心。

最终这个工作;但我会解释一些我坚持的观点。

我使用请求匹配的我的呼叫划分成不同HTTP configuration blocks

为了1 I构成的块中的请求进行过滤,从一个特定的工具,由用户代理。在该块中,我基本上以标准OOTB方式配置基本身份验证。尽管我编写并提供了自己的身份验证提供程序,但此提供程序调用了我们用来通过用户名/密码管理用户的基础系统。

然后,为了2,我配置了一个块来处理Kerberos。在与Kerberos提供者配置摔跤并提出了一个在我们的底层系统中进行身份验证的方案后,这一切都得到了很好的处理。从Kerberos获取连接到我的网络应用程序的域用户的用户名后,我查看了该用户名是否在我的系统中。如果他们是,我们登录他们。如果不是,我们将他们引导到登录页面。 (不是每个域用户都被授权使用我们的网络应用程序,即使它们已通过身份验证)

然后最后,最后一块被配置为表单身份验证。

但有一些困难点。

  • 我必须为我的自定义基本/表单和Kerberos提供程序全局配置身份验证管理器。
  • 而且作为一个便笺,我确实必须配置我的认证管理器bean,如this link suggests。可能是由于我创建的xml/java配置的拼凑在一起的shamble。
  • IE也很奇怪。在我的kerberos链中,我还配置了登录表单。这使得有资格获得链的用户可以直接导航到登录表单进行身份验证;或者如果有人失败了我的Kerberos用户名检查,我可以将它们转发到登录页面。这与FireFox一起工作良好,但即使在我的服务器发送重定向后,IE仍继续发送协商标题。基本上,用户失败kerberos,重定向到登录页面,但IE依然发送Kerberos令牌。这会导致Spring Security的SpnegoAuthenticationProcessingFilter再次触发并验证Kerberos令牌,当然这会再次失败,并向用户发送继续循环的登录页面。

总之春季安全进行3不错,还算干净块,所有做各种不同的认证/授权,然后一前一后的所有作品,提供相同的用户上下文对象我们的Web应用程序。