2013-07-18 16 views
5

Pracuję nad bardzo prostą aplikacją Java, którą należy zabezpieczyć nazwą użytkownika i hasłem. Muszę użyć Active Directory do uwierzytelnienia. Mogę zezwolić tylko uwierzytelnionym użytkownikom na dostęp do niego. Nie potrzebuję żadnego rodzaju sprawdzania grupy/roli, aby określić, co mogą zobaczyć użytkownicy. Używam JETTY do uruchomienia aplikacji.Pomost - JAAS i Active Directory - tylko uwierzytelnianie?

Od dłuższego czasu próbuję wdrożyć moduł logowania LDAP z Jetty. Ale za każdym razem, gdy przesyłam formularz logowania, pojawia się błąd 403 z komunikatem "! Rola".

HTTP ERROR 403 

Problem accessing /JAAS/. Reason: 

    !role 

Jetty standardowe wyjście kiedy przesłać formularz logowania:

2013-07-18 19:28:47.035:INFO:oejpjs.LdapLoginModule:Searching for users with filter: '(&(objectClass={0})({1}={2}))' from base dn: DC=mydomain,DC=test,DC=local 
2013-07-18 19:28:47.041:INFO:oejpjs.LdapLoginModule:Found user?: true 
2013-07-18 19:28:47.042:INFO:oejpjs.LdapLoginModule:Attempting authentication: CN=User Name,OU=ADMIN_HOME,DC=mydomain,DC=test,DC=local 

Jetty plik dziennika, kiedy przesłać formularz logowania (login I wprowadził pojawia się w dzienniku, więc część uwierzytelniania wydaje do pracy):

0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/ HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/login.html HTTP/1.1" 304 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:47 +0000] "POST /JAAS/j_security_check HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - username [18/Jul/2013:17:28:47 +0000] "GET /JAAS/ HTTP/1.1" 403 1362 

Wyciąg z web.xml gdzie bezpieczeństwo, ograniczenie i bezpieczeństwa Roke deklarowane są:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Entire Application</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <security-role> 
     <role-name>*</role-name> 
    </security-role> 

    <security-role> 
     <role-name>Domain Users</role-name> 
    </security-role> 

    <security-role> 
     <role-name>MyLocalGroup</role-name> 
    </security-role> 

LDAP plik konfiguracyjny moduł Logowanie (ldaploginmodule.conf): konfiguracja

myloginmodule { 
    org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required 
    debug="true" 
    debugNative="true" 
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory" 
    hostname="ldapserver" 
    port="389" 
    bindDn="CN=Administrator,CN=Users,DC=mydomain,DC=test,DC=local" 
    bindPassword="secret" 
    directGroupExtraction="true" 
    userGroupAttribute="cn" 
    allRolesMode="authOnly" 
    userFilter="(objectClass=organizationalPerson)" 
    authenticationMethod="simple" 
    forceBindingLogin="true" 
    userBaseDn="DC=mydomain,DC=test,DC=local" 
    userRdnAttribute="cn" 
    userIdAttribute="sAMAccountName" 
    userPasswordAttribute="unicodePwd" 
    userObjectClass="user" 
    roleSearch="(member={0})" 
    roleName="cn" 
    roleSubtree="true" 
    roleBaseDn="CN=Users,DC=mydomain,DC=test,DC=local"; 
    }; 

Jetty sfera (my-jaas.xml):

<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- JAAS TEST --> 
    <Call name="addBean"> 
     <Arg> 
      <New class="org.eclipse.jetty.plus.jaas.JAASLoginService"> 
      <Set name="Name">Test JAAS Realm</Set> 
      <Set name="LoginModuleName">myloginmodule</Set> 

      <Set name="roleClassNames"> 
       <Array type="java.lang.String"> 
        <Item>org.eclipse.jetty.plus.jaas.JAASRole</Item> 
       </Array> 
      </Set> 

      </New> 
     </Arg> 
    </Call> 

</Configure> 

Wreszcie polecenie uruchamiania pomost:

java -Xdebug -Djava.naming.referral=follow -Djava.security.auth.login.config=etc/ldaploginmodule.conf -jar start.jar etc/my-jaas.xml 

Sprawdziłem dziennik zdarzeń Windows Security i widzę pomyślny wpis audytu dla zalogowania r użytkownika podanego w formularzu logowania.

Chodzi o to, że nie potrzebuję żadnej roli. Po prostu chcę przeprowadzić uwierzytelnianie i umożliwić wszystkim uwierzytelnionym użytkownikom dostęp do aplikacji.

Masz pomysł, że mogę mieć tylko uwierzytelnianie i unikać ról? Zastanawiałem się nad przesłonięciem klasy LdapLoginModule i wymuszeniem "dummy" roli, którą zadeklarowałbym w web.xml. Ale nie jestem pewien, czy to jest właściwy sposób, aby to zrobić.

Odpowiedz

0

Twoje uwierzytelnienie zakończyło się pomyślnie.

Ponieważ chcesz umożliwić wszystkim uwierzytelnionym użytkownikom dostęp do wszystkiego, musisz nadal chronić wzorzec adresu URL/* w trakcie pracy. Możesz użyć RegExpAuthorizationFilter (patrz https://wiki.apache.org/solr/SolrSecurity). Teraz nie obejmują tej klasy w regularnej dystrybucji. Znalazłem kod tutaj (https://issues.apache.org/jira/secure/attachment/12572819/SOLR-4470_branch_4x_r1454444.patch) i łatwo go skompilowałem.

Po skonfigurowaniu filtru określ dowolny arbitralny (nieistniejący, jak/abcde) wzorzec adresu URL z dowolną rolą. Działa to w ten sposób, że zobaczy, czy żądany adres URL pasuje do tego wzorca. Ponieważ nie, porusza się do przodu. Ale nie ma więcej reguł, a dostęp jest dozwolony.

Wymaga to uwierzytelnienia dla wszystkich adresów URL, ale wszystkie prawidłowe adresy URL będą dostępne po pomyślnym uwierzytelnieniu.

Moja konfiguracja była w kontekście solr na Jetty. Myślę jednak, że cała moja konfiguracja była powiązana ze standardowymi materiałami, takimi jak web.xml.

0

Trzeba zmodyfikować web.xml użyć szczególną rolę ** jak wskazano tutaj: Authorization section for Jetty Authentication:

dostęp przyznany każdemu użytkownikowi, który jest uwierzytelniony, niezależnie od ról. Jest to sygnalizowane przez specjalną wartością „**” do roli nazwa-> z < auth-przymusu > w < bezpieczeństwem przymusu >

So <, to co moje bezpieczeństwo, ograniczenie wygląda :

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Secured Solr Admin User Interface</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>**</role-name> 
    </auth-constraint> 
</security-constraint> 
Powiązane problemy