Java SSO:针对Active Directory的Kerberos身份validation
我仍在尝试为SSO(在* nix上运行)找到基于Java的解决方案,我可以在JBoss上使用它来针对Active Directory /域控制器进行授权。 我最初尝试通过NTLM执行此操作,但放弃了因为它在Windows Server> = 2008上不受支持。
因此,我正在尝试使用Kerberos实现此function,但似乎无法找到正确/可行的解决方案。 请指出正确的方向,说明如何设置这样的配置,如何validationActive Directory和/或域控制器,以便:
- 找出该帐户是否有效
- 获取用户的组列表
任何帮助表示赞赏!
UPDATE
我正在使用jcifs-ext-0.9.4和jcifs-krb5-1.3.12开发解决方案。 我按如下所述设置了web.xml:
auth jcifs.http.AuthenticationFilter java.security.auth.login.config /WEB-INF/login.conf jcifs.spnego.servicePrincipal HTTP/testconn@mydomain.com jcifs.spnego.servicePassword supersecret sun.security.krb5.debug true java.security.krb5.realm mydomain.com java.security.krb5.kdc testdom01.mydomain.com jcifs.smb.client.domain TESTDOMAIN jcifs.http.enableNegotiate true jcifs.http.basicRealm mydomain.com jcifs.http.domainController testdom01.mydomain.com auth /*
如果尝试访问应用程序,这会导致以下堆栈跟踪:
2010-07-22 15:53:10,588 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/google].[default]] Servlet.service() for servlet default threw exception java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at jcifs.ntlmssp.Type2Message.toByteArray(Type2Message.java:261) at jcifs.spnego.Authentication.processNtlm(Authentication.java:265) at jcifs.spnego.Authentication.process(Authentication.java:233) at jcifs.http.Negotiate.authenticate(Negotiate.java:46) at jcifs.http.AuthenticationFilter.doFilter(AuthenticationFilter.java:192) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:619)
任何帮助表示赞赏。
为此,您实际上需要使用LDAP。 幸运的是,Java对Kerberos和LDAP都有坚实的支持。 详细程序见http://java.sun.com/products/jndi/tutorial/ldap/security/gssapi.html 。
步骤概述: – 对Kerberos进行身份validation – 使用Kerberos承担用户身份 – 执行GSSAPI绑定到Active Directory LDAP服务器 – 通过LDAP检索组列表
你可以使用华夫cookies 。 它是免费的,支持Negotiate,NTLM和Kerberos。 您还可以使用它检查用户的组列表。
“WAFFLE – Windows身份validationfunction框架(Light Edition)是一个本机C#和Java库,可以执行所有Windows身份validation(Negotiate,NTLM和Kerberos)。”
我们使用Jespa来处理NTLM身份validation,我们已经在Solaris上运行的Tomcat和Glassfish上进行了测试,IE和Firefox都受到支持,而Chrome现在也支持NTLM。 你需要一个商业用途的许可证,但我肯定会推荐它。
当我尝试使用kerberos和JBoss时,我开始撰写一篇文章,计划是为初学者提供一个完整的指南,以便在JBoss中设置和使用kerberos。 我并不是说这是一个完整的答案,但如果你提出问题,我可以尝试回答它们并将它们添加到博客中。
这篇文章
如果要在计算机上调试kerberos,AD配置,则可以从以下链接下载应用程序。 https://github.com/shubham49/debugSSO下载应用程序并将其部署在weblogic服务器上。 部署后打开主页,您将遇到不同的测试来调试配置。
- 使用JAAS LdapLoginModule通过ActiveDirectory进行身份validation时遇到FailedLoginException
- 检测使用Java Web应用程序登录计算机的用户
- 具有错误的Active Directory Ldap凭据的会话/ Redis序列化错误的Spring启动
- Java SimpleDateFormat总是返回1月份的月份
- 密码的SPNEGO身份validation问题
- 在ssl(ldaps)的支持下连接活动目录
- 使用LDAP / Java启用Active Directory用户
- 如何配置JDBC连接以使用与当前用户不同的AD用户?
- 将Ldap用户与使用Java的组关联