Java SSO:针对Active Directory的Kerberos身份验证

Java SSO:针对Active Directory的Kerberos身份验证,java,authentication,active-directory,single-sign-on,kerberos,Java,Authentication,Active Directory,Single Sign On,Kerberos,我仍在尝试寻找一种基于Java的SSO解决方案(在*nix上运行),我可以在JBoss上使用该解决方案对Active Directory/域控制器进行授权。我最初试图通过NTLM实现这一点,但放弃了,因为Windows Server>=2008不支持它 因此,我试图使用Kerberos实现这一点,但似乎不可能找到正确/有效的解决方案。请为我指出正确的方向,解释如何设置此类配置,如何针对Active Directory和/或域控制器进行验证,以便: 查明该帐户是否有效,以及 获取用户的组列表 感谢

我仍在尝试寻找一种基于Java的SSO解决方案(在*nix上运行),我可以在JBoss上使用该解决方案对Active Directory/域控制器进行授权。我最初试图通过NTLM实现这一点,但放弃了,因为Windows Server>=2008不支持它

因此,我试图使用Kerberos实现这一点,但似乎不可能找到正确/有效的解决方案。请为我指出正确的方向,解释如何设置此类配置,如何针对Active Directory和/或域控制器进行验证,以便:

  • 查明该帐户是否有效,以及
  • 获取用户的组列表
  • 感谢您的帮助


    更新

    我正在使用jcifs-ext-0.9.4和jcifs-krb5-1.3.12开发一个解决方案。我按照如下所述设置web.xml:

    
    认证
    jcifs.http.AuthenticationFilter
    java.security.auth.login.config
    /WEB-INF/login.conf
    jcifs.spnego.servicePrincipal
    HTTP/testconn@mydomain.com
    jcifs.spnego.servicePassword
    超机密
    sun.security.krb5.debug
    真的
    java.security.krb5.realm
    mydomain.com
    java.security.krb5.kdc
    testdom01.mydomain.com
    jcifs.smb.client.domain
    测试域
    jcifs.http.enableNegotiate
    真的
    jcifs.http.basicrelm
    mydomain.com
    jcifs.http.domainController
    testdom01.mydomain.com
    认证
    /*
    
    如果尝试访问应用程序,将导致以下stacktrace:

    2010-07-22 15:53:10588错误[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]./google].[default]]Servlet默认值的Servlet.service()引发异常
    java.lang.ArrayIndexOutOfBoundsException
    位于java.lang.System.arraycopy(本机方法)
    位于jcifs.ntlmssp.Type2Message.toByteArray(Type2Message.java:261)
    在jcifs.spnego.Authentication.processNtlm(Authentication.java:265)
    位于jcifs.spnego.Authentication.process(Authentication.java:233)
    在jcifs.http.Negotiate.authenticate(Negotiate.java:46)
    位于jcifs.http.AuthenticationFilter.doFilter(AuthenticationFilter.java:192)
    位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    位于org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    位于org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
    位于org.jboss.web.tomcat.security.jaccontextvalve.invoke(jaccontextvalve.java:74)
    位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    位于org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    位于org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    位于org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    运行(Thread.java:619)
    

    非常感谢您的帮助。

    要做到这一点,您实际上需要使用LDAP。幸运的是,Java对Kerberos和LDAP都有可靠的支持。详细程序载于

    步骤概述:

    • 对Kerberos进行身份验证
    • 使用Kerberos假定用户身份
    • 执行GSSAPI绑定到Active Directory LDAP服务器
    • 通过LDAP检索组列表
    我们用于处理NTLM身份验证,我们已经在Solaris上运行的Tomcat和Glassfish上进行了测试,IE和Firefox都受支持,Chrome现在也明显支持NTLM。不过,您需要商业使用许可证,但我绝对推荐。

    您可以使用。它是免费的,支持协商、NTLM和Kerberos。您还可以使用它检查用户的组列表


    “WAFFLE-Windows身份验证功能框架(Light Edition)是一个本机C#和Java库,它完成了Windows身份验证的所有工作(协商、NTLM和Kerberos)。”

    我开始写一篇文章,当时我正在试验Kerberos和JBoss,计划是为初学者提供一个完整的指南,帮助他们在JBoss中设置和使用kerberos。我不是说这是一个完整的答案,但如果你问问题,我可以尝试回答他们,并将他们添加到博客


    如果要调试机器上的kerberos、AD配置,则可以从以下链接下载应用程序。 下载应用程序并将其部署到weblogic server上。
    部署后打开主页,您将遇到不同的测试来调试配置。

    Waffle不幸地使用win32 api,并且只在Windows上运行。为什么会得到否决票?Kerberos不包含用户组的列表!Jespa对我来说的问题是,它假设JavaEE,并且使用Play之类的框架使它对我来说不可用