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