【问题标题】:Java SSO with Wildfly 8, Java 1.8.0_45 and Active Directory带有 Wildfly 8、Java 1.8.0_45 和 Active Directory 的 Java SSO
【发布时间】:2015-10-06 10:40:21
【问题描述】:
我在这个主题上搜索了很多,但找不到解决方案。
要求的简短描述:
- Wildfly 8.2 下 WebApp 上的 SSO
- 向 Active Directory 验证 Windows 用户
- SSO 失败时回退到登录表单
- 在 Wildfly 的域配置中运行
环境:
- Microsoft AD Windows Server 2012 R2(1. 机器)
- Microsoft Server 2012 R2 和 Wildfly 8.2(2. 机器)
- 2.机器加入域
到目前为止,我尝试的是通过 ktpass、kinit 将 AD 和 Wildfly 服务器绑定在一起......它可以工作!
尝试了以下操作:
github.com/dstraub/spnego-wildfly
实际上不起作用,没有后备(基于表单)并且Java版本1.8.0_45存在问题
sourceforge.net/p/spnego/discussion/1003769/thread/700b6941/#cb84。
接下来尝试:
github.com/kwart/spnego-demo
也不起作用,Wildfly 8.2 似乎有不同的行为。
华夫饼库:
不能让它在 Wildfly 下工作,对 Tomcat 的支持很好,但仅此而已。
有人对此配置有经验并有解决方案吗?
【问题讨论】:
标签:
java
single-sign-on
wildfly
【解决方案1】:
解释如下:
-
我创建了一个包含以下库的 webapp:
- guava-18.0.jar
- jna-4.1.0.jar
- jna-platform-4.1.0.jar
- slf4j-api-1.7.12.jar
- waffle-jna-1.7.4.jar
我已经在 web.xml 中声明了 Webfilter:
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 之后,您可以从 HttpServletRequest 中读取用户
public String getUserName() {
Enumeration<String> headerNames = servletRequest.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = servletRequest.getHeader(headerName);
System.out.println("Header Name:" + headerName + " " + headerValue);
}
return servletRequest.getUserPrincipal().getName();
}
- 为单点登录配置浏览器:
https://github.com/dblock/waffle/blob/master/Docs/ConfiguringBrowsers.md
【解决方案2】:
我将解释这些技术。 Arkin 谈到 NTLM...,SPNEGO dstraub 是一个面向 SPNEGO 的 kerberos。如果您阅读源代码,它不支持 NTLM。
但是如果你使用 JSF 并且有一个 PhaseListener,你会在过滤之前直接在登录表单上重定向。使用 AS JBOSS,您可以使用 Valve 在 jbossweb 中进行身份验证...,但不能使用 wildfly。
因为你不能在 web.xml 中放置 2 auth-form 方法,如果你想要 kerberos(如过滤器中的链),你必须使用基于 SPNEGO 的新机制身份验证,如果你想要 NTLM,则基于 waffle
在华夫饼网站上要小心。据说阀门适用于野蝇,但这是一个错误。现在 wildlfy 使用 undertow 网络服务器,没有更多的 tomcat 阀门进入。此外wildlfy 9和我认为8也删除了所有身份验证机制,只有FORM,BASIC,EXTERNAL和CERT-DIGEST存在。 Wildlfy 10 添加了 kerberos 身份验证。
现在 NTLM 甚至第 2 版都已弃用,并且几年后未得到保护。使用 kerberos 验证更安全(活动目录上只有很少的配置)...