2015-03-17 3 views
3

Мне нужно настроить JBoss EAP 6.3 для понимания аутентификации Kerberos.Как настроить JBoss EAP 6.3 WebApp для проверки подлинности Kerberos

Моя среда состоит из:

  • Linux сервер с 6,3
  • клиентской станции JBoss EAP с Windows 7 64bit + Chrome
  • Windows Server 2008 Active Directory (выступать в качестве KDC)

Я уже много примеров пробовал, но никто из них не работает. В основном, я сделал все, что по этому документу: RedHat JBoss 6.3 Kerberos

и этот документ: JBoss blog RadoslawRodak

и этот документ: JBoss developer blog

И все, что я получаю от тестирования сервлета (JBoss-переговоры-инструментарий) это сообщение: WARN [org.jboss.security.auth.spi.AbstractServerLoginModule] (http-/172.27.185.220: 8080-1) Неподдерживаемый механизм переговоров «NTLM»

Кто-нибудь прошел через это и как-то решил?

Спасибо заранее, Josef

+0

Во-первых, я бы отключить NTLM как-то, так как NTLM = Kerberos – Tair

+0

Это может помочь: http://blogs.technet.com/b/ askds/archive/2009/10/08/ntlm-blocking-and-you-application-analysis-and-auditing-methodsologies-in-windows-7.aspx – Tair

+1

И вы добавили URL приложения в список исключений безопасности? – Tair

ответ

1

Посмотрите на мою SPNEGO демонстрационный проект https://github.com/kwart/spnego-demo

Try, чтобы сделать его работу с связанного kerberos-using-apacheds проекта.

Если вы можете успешно выполнить проверку подлинности на ApacheDS Kerberos, попытайтесь изменить конфигурацию (krb5.conf и Krb5LoginModule параметров в области host безопасности), чтобы использовать ваш Active Directory для проверки подлинности.

Общая погрешность неправильная SPN name. Основная услуга должна быть в форме HTTP/[email protected] (например HTTP/[email protected])

Вы можете найти некоторые другие намеки в моей старой презентации - http://www.slideshare.net/josef.cacek/dev-conf2013-ltkerberosas7

+0

Привет, спасибо за ваши предложения/идеи. Наконец мы это сделали. Но это была довольно сложная задача! –

1

Спасибо всем. Как я уже говорил, мы наконец сделали это. Наше решение было таким:

0) Клиентский компьютер должен быть быть в домене, если у вас есть учетные данные домена .

Создать таблицу ключей (для сервера 2008 критически KVNO 0):

ktpass -out bbb.keytab -princ HTTP/[email protected] -mapUser CEZ.LOC\bbb -mapOp set -pass password -ptype KRB5_NT_PRINCIPAL -kvno 0 

ktab -k bbb.keytab -l -e -t 
Keytab name: bbb.keytab 
KVNO Timestamp  Principal 
0 1/1/70 1:00 AM HTTP/[email protected] (23:RC4 with HMAC) 

Stop JBoss и передать его в Linux в папке конфигурации JBoss. /opt/jboss-domain/standalone/configuration/bbb.keytab

1) Конфигурация JBoss (автономная.XML)

<system-properties> 
    <property name="java.security.krb5.kdc" value="CEZ.LOC"/> 
    <property name="java.security.krb5.realm" value="CEZ.LOC"/> 
    <property name="java.net.debug" value="all"/> 
    <property name="sun.security.krb5.debug" value="true"/> 
</system-properties> 

<security-domain name="host" cache-type="default"> 
    <authentication> 
    <login-module code="Kerberos" flag="required"> 
     <module-option name="storeKey" value="true"/> 
     <module-option name="useKeyTab" value="true"/> 
     <module-option name="principal" value="HTTP/[email protected]"/> 
     <module-option name="keyTab" value="/opt/jboss-domain/standalone/configuration/bbb.keytab"/> 
     <module-option name="doNotPrompt" value="true"/> 
     <module-option name="debug" value="true"/> 
    </login-module> 
</authentication> 
</security-domain> 

<security-domain name="SPNEGO" cache-type="default"> 
<authentication> 
    <login-module code="SPNEGO" flag="requisite"> 
    <module-option name="password-stacking" value="useFirstPass"/> 
    <module-option name="serverSecurityDomain" value="host"/> 
    </login-module> 
</authentication> 
</security-domain> 

2) Web App конфигурации:

web.xml: 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Restricted</web-resource-name> 
     <url-pattern>/rest/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<security-role> 
    <role-name>*</role-name> 
</security-role> 

jboss-web.xml: 
<jboss-web> 
    <security-domain>java:/jaas/SPNEGO</security-domain> 
     <valve> 
     <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name> 
     </valve> 
    <context-root>kerberoes</context-root> 
</jboss-web> 

jboss-deployment-structure.xml: 
<jboss-deployment-structure> 
    <deployment> 
    <dependencies> 
     <module name="org.jboss.security.negotiation" /> 
    </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

3) Restart Ключ распределения услуг по AD

4) Начало JBoss

5) Добавить адрес веб-сервера JBoss в доверенных хостов в настройках Интернета в разделе «Интранет». С этого момента все работает.

Rest Web App можно использовать это, чтобы получить действительные учетные данные:

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.Application; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.SecurityContext; 

@Path("/ping") 
public class Ping extends Application 
{ 
    @Context 
    private SecurityContext mySecurityContext; 

    @GET 
    public Response doGET() 
    { 
     try 
     { 
      Date now = Calendar.getInstance().getTime();   
      String reportDate = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(now); 
      String returnString = ""; 

      // return ok json 
      returnString = "Time: " + reportDate + "<br>\n"; 
      returnString += "User: " + 
      mySecurityContext.getAuthenticationScheme() + "/" + 
      mySecurityContext.getUserPrincipal().getName() + "<br>\n"; 
      return Response.status(200).entity(returnString).build(); 
     } 
     catch (Exception e) 
     { 
      return Response.status(500).entity("Exception! " + 
      e.getMessage()).build(); 
     } 
    } 
} 
+0

Я забыл добавить информацию о MANIFEST.MF, который я отредактировал таким образом: Manifest-Version: 1.0 Зависимости: org.jboss.security.negotiation –

+0

Вам не нужно менять MANIFEST.MF при указании модуля зависимостей в jboss-deployment-structure.xml. – kwart

Смежные вопросы