Java SSO: проверка подлинности Kerberos по Active Directory - PullRequest
12 голосов
/ 25 июня 2010

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

Поэтому я пытаюсь реализовать это с помощью 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/testconn@mydomain.com</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>

Это приводит к следующей трассировке стека при попытке доступа к приложению:

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 ]

6 голосов
/ 08 июля 2010

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

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

1 голос
/ 12 августа 2010

Можно использовать Вафля . Это бесплатно и поддерживает переговоры, NTLM и Kerberos. С его помощью вы также можете проверить список групп пользователей.

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

0 голосов
/ 31 августа 2017

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

0 голосов
/ 26 октября 2011

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

статья

0 голосов
/ 11 августа 2010

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

...