12

Я все еще пытаюсь найти решение на базе Java для SSO (работает на * nix), которое я могу использовать для JBoss для авторизации против контроллера Active Directory/домена. Сначала я попытался сделать это через NTLM, но отказался, потому что он не будет поддерживаться в Windows Server> = 2008.Java SSO: аутентификация Kerberos в Active Directory

Поэтому я пытаюсь реализовать это с помощью Kerberos, но, похоже, невозможно найти правильный/рабочий решение. Пожалуйста, укажите мне в правильном направлении, объясняющие, как настроить такую ​​конфигурацию, как проверить против Active Directory и/или контроллера домена с целью:

  1. узнать, если учетная запись действительна и
  2. выборки список групп пользователей

Любая помощь приветствуется!


UPDATE

Я работаю над решением с использованием JCIFS-Ext-0.9.4 и JCIFS-krb5-1.3.12. Я создал web.xml, как описано ниже:

<web-app> 
    <!-- servlet/servlet-mapping/welcome-file-list skipped --> 

<filter> 
<filter-name>auth</filter-name> 
<filter-class>jcifs.http.AuthenticationFilter</filter-class> 

<init-param> 
<param-name>java.security.auth.login.config</param-name> 
<param-value>/WEB-INF/login.conf</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.spnego.servicePrincipal</param-name> 
<param-value>HTTP/[email protected]</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.spnego.servicePassword</param-name> 
<param-value>supersecret</param-value> 
</init-param> 

<init-param> 
<param-name>sun.security.krb5.debug</param-name> 
<param-value>true</param-value> 
</init-param> 

<init-param> 
<param-name>java.security.krb5.realm</param-name> 
<param-value>mydomain.com</param-value> 
</init-param> 

<init-param> 
<param-name>java.security.krb5.kdc</param-name> 
<param-value>testdom01.mydomain.com </param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.smb.client.domain</param-name> 
<param-value>TESTDOMAIN</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.enableNegotiate</param-name> 
<param-value>true</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.basicRealm</param-name> 
<param-value>mydomain.com</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.domainController</param-name> 
<param-value>testdom01.mydomain.com</param-value> 
</init-param> 

</filter> 
<filter-mapping> 
<filter-name>auth</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

Это приводит к следующему StackTrace при попытке получить доступ к приложению:

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) 

Любая помощь приветствуется.

ответ

5

Для этого вам действительно необходимо использовать LDAP. К счастью для вас, Java имеет надежную поддержку как для Kerberos, так и для LDAP. Подробная процедура - http://java.sun.com/products/jndi/tutorial/ldap/security/gssapi.html.

Обзор этапов: - Аутентифицировать к Kerberos - Использование Kerberos считать идентификатор пользователя - Выполните GSSAPI привязку к серверу Активный LDAP Directory - Получение списка групп по LDAP

+0

Почему это получило нижний предел? Kerberos не содержит список групп пользователей! – Borealid

0

Мы используем Jespa для аутентификации NTLM, мы протестировали на Tomcat & Glassfish, работающий на Solaris, IE & Firefox поддерживаются, и, возможно, Chrome теперь поддерживает NTLM. Вам понадобится лицензия для коммерческого использования, но я бы определенно рекомендовал ее.

+0

проблема с Jespa для меня в том, что он предполагает Java EE и использование фреймворков, таких как Play, делает его непригодным для меня – andyczerwonka

3

Вы можете использовать Waffle. Он бесплатный и поддерживает переговоры, NTLM и Kerberos. Вы также можете проверить список групп пользователей.

«WAFFLE - функциональная среда проверки подлинности Windows (Light Edition) - это родная библиотека C# и Java, которая выполняет все проверки подлинности Windows (переговоры, NTLM и Kerberos)».

+2

Waffle к сожалению использует win32 api и работает только в Windows – MrG

0

Я начал писать статью, как я экспериментировал с kerberos и JBoss, план состоит в том, чтобы иметь полное руководство для начинающих, чтобы настроить и использовать кеберо с JBoss. Я не говорю, что это полный ответ, но если вы зададите вопросы, я могу попытаться ответить на них и добавить их в блог.

the article

0

Если вы хотите отлаживать Kerberos, конфигурации AD на вашей машине, то вы можете загрузить приложение по следующей ссылке. https://github.com/shubham49/debugSSO Загрузите приложение и разверните его на сервере weblogic. После развертывания откройте домашнюю страницу, и вы будете испытывать различные тесты для отладки конфигурации.