【问题标题】: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 服务器绑定在一起......它可以工作!

  1. 尝试了以下操作: github.com/dstraub/spnego-wildfly 实际上不起作用,没有后备(基于表单)并且Java版本1.8.0_45存在问题 sourceforge.net/p/spnego/discussion/1003769/thread/700b6941/#cb84。

  2. 接下来尝试: github.com/kwart/spnego-demo 也不起作用,Wildfly 8.2 似乎有不同的行为。

  3. 华夫饼库: 不能让它在 Wildfly 下工作,对 Tomcat 的支持很好,但仅此而已。

有人对此配置有经验并有解决方案吗?

【问题讨论】:

  • 我终于让它和 WAFFLE 一起工作了。
  • 怎么样?请分享这些信息!

标签: java single-sign-on wildfly


【解决方案1】:

解释如下:

  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
  2. 我已经在 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>
  1. 之后,您可以从 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();
}
  1. 为单点登录配置浏览器:

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 验证更安全(活动目录上只有很少的配置)...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多