/ / Zabezpieczenia Java Spring nie rozpoznają wyłączonych kont LDAP - java, spring-security, openldap, spring-ldap

Zabezpieczenia Java Spring nie rozpoznają wyłączonych kont LDAP - java, spring-security, openldap, spring-ldap

Zobacz podsumowanie edycji 1 poniżej, aby uzyskać pytanie podsumowujące

Korzystam z bibliotek Spring Security (v3.0.5) do obsługi uwierzytelniania dla aplikacji WWW (wdrożonej w JBoss AS7). Zarządzanie kontem jest obsługiwane przez IdM na OpenLDAP.

Kiedy tworzone jest nowe konto, domyślnie jest tworzone z "nsaccountlock"atrybut operacyjny ustawiony na" true "Możemy potwierdzić, że konto jest" wyłączone ", logując się do portalu internetowego IdM i wymieniając użytkowników - nowi użytkownicy są wymienieni jako wyłączeni.

Problem polega na tym, że nasza aplikacja internetowa ignoruje to nsaccountlock atrybut całkowicie, gdy szuka wpisu użytkownika. Raport logów Springframework "Enabled: true" dla wszystkich kont, które próbują uwierzytelnić, bez względu na to, czy mają nsaccountlock = true lub fałszywy.

Przeszukiwałem tyle kodu źródłowego, co mogę znaleźć, i nie mogę znaleźć niczego, co faktycznie ustawia stan "włączony" na false (patrz org.springframework.security.ldap.userdetails.LdapUserDetailsImpl i dowolnej podklasy). Spodziewałbym się, że tak się stanie org.springframework.security.ldap.userdetails.LdapUserDetailsMapper.mapUserFromContext () ale zdecydowanie nie ustawia flagi Enabled w dowolnym miejscu.

Wyszukiwanie LDAP i pobieranie wpisów jest konfigurowane w kilku plikach .xml (których niestety niestety nie mogę tutaj opublikować), które definiują użycie klas, takich jak org.springframework.security.ldap.authentication.LdapAuthenticationProvider, org.springframework.security.ldap.search.FilterBasedLdapUserSearchitp.

Powinienem używać innego typu org.springframework.security.core.userdetails.UserDetails implementacja do przechwytywania stanu wyłączonego z LDAP? Czy brakuje mi jakiegoś oczywistego elementu konfiguracyjnego, który wskazywałby, w jaki sposób Spring może określić wyłączony stan wpisu LDAP?

Uwaga: Mogę skonfigurować wyszukiwanie LDAP w celu pobrania "nsaccountlock" jako atrybutu w odpowiedzi UserDetails, a atrybut jest logowany poprawnie (czy wartość jest prawdą czy fałszem), ale nadal nie wpływa na "aktywną" wartość logiczną. Działa tylko jako kolejne metadane (np. Telefon, adres, e-mail itp.).

Edytuj-1

Być może z góry zadawałem niewłaściwe pytanie. W końcu chciałbym to wiedzieć:

Co może spowodować, że LdapUserDetailsImpl.isEnabled () zwróci false? tj. Co musimy zrobić, aby upewnić się, że program Spring Security rozpoznaje wyłączone konta?

Mam nadzieję, że to kwestia konfiguracji.Myślę, że ma coś wspólnego z AuthenticationManager (używamy org.jasig.cas.authentication.AuthenticatoinManagerImpl)

Dziękuję za pomoc i przepraszam za nieporządne pytanie.

Odpowiedzi:

0 dla odpowiedzi № 1

O ile wiem, OpenLDAP i protokół LDAP, nsaccountlock nie jest atrybutem używanym przez OpenLDAP do śledzenia zamkniętego konta, jest to atrybut używany w Sun Directory Server (Sun LDAP Directory).

Ale z punktu widzenia OpenLDAP jest taki sam jak każdy inny atrybut informacyjny.

Jeśli chcesz zarządzać zasadami haseł, musisz zaimplementować nakładkę ppolicy który jest opisany tutaj