2011-11-05 24 views
7

Pracuję nad implementacją zabezpieczeń opartych na rolach w LDAP i Java. Konkretnie mam następujące obiekty że muszę reprezentować w LDAP:Implementacja zabezpieczeń opartych na rolach w LDAP

  • Użytkownicy
  • koncernów użytkowników - HR, finansów itp
  • Uprawnienia - DOCUMENT_READ, DOCUMENT_MODIFY itp
  • ról - ADMIN, GUEST itp.

Role to w zasadzie grupy uprawnień, które można przypisać do użytkownika lub grupy użytkowników.

Myślałam o reprezentowanie ich w LDAP jako folows:

  • Użytkownicy - zajęcia z osobą i uidObject atrybutu userPassword.
  • Grupy użytkowników - klasa organizacyjna, w której znajdują się użytkownicy .
  • Role - klasa obiektu groupOfNames.
  • Uprawnienia - nie mam pewności co do tej, być może również klasy groupOfNames .

Chodzi o szybki dostęp od użytkownika lub grupy do listy ról tego użytkownika lub grupy. Wiem, że mogę umieścić użytkowników i grupy w atrybutach "członka" roli, ale wtedy będę musiał przeskanować wszystkie role, aby znaleźć te, które mają wymieniony użytkownik. Czy istnieje sposób na coś podobnego do atrybutu "member" w obiekcie Person?

Czy ktoś ogólnie wie o dobrej implementacji zabezpieczeń opartych na rolach w LDAP? Nie mogłem znaleźć dobrej dokumentacji lub samouczków na ten temat. Używam ApacheDS jako serwera LDAP, ale jestem otwarty na sugestie.

Odpowiedz

8

użytkowników: inetOrgPerson

Kolekcje: organizationalUnit, ale uważaj próbuje replikować swoją strukturę organizacyjną w katalogu LDAP: zazwyczaj jest to błędem, ponieważ organizacje zmienić i użytkowników poruszać organizacji. Powinieneś rozważyć użycie atrybutu ou .

Role: organizationalRole. Użyłem grup ról jako groupOfUniqueNames, ale to był błąd, powinienem był nadal używać funkcji organizationRole, aby role były po prostu rekurencyjne.

Pozwolenie: to tylko rola naprawdę, albo atrybut roli. Jeśli używasz CMA, są one zdefiniowane w web.xml, a nie LDAP.

Jak już wspomniałem, nie próbuj sprawić, aby drzewo LDAP odzwierciedlało Twoją organizację. Zrób z niego lustro z własną organizacją. Używam atrybutów o wielu wartościach wszędzie tam, gdzie jest to konieczne. Używam organizationUnit głównie dla warstw w samym LDAP lub tam, gdzie złamałem moje zasady powyżej ;-)

OpenLDAP ma nakładkową naklejkę integralności, która może zachować wiele z tego prosto dla ciebie.

Istnieje kilka bardzo dobrych wskazówek na temat struktury LDAP w Mastering OpenLDAP Matt Butcher i wyższy poziom Widok od tego wszystkiego w ustaleń i wdrażania LDAP Directory Services przez Howes et al.

+0

Dziękuję, spróbuję. ou atrybut to dobry pomysł. W moim scenariuszu dana osoba może należeć do więcej niż jednej jednostki organizacyjnej, więc nie jestem pewien, która z nich jest lepsza - posiada wiele atrybutów ou lub może również tworzyć grupy groupOfNames. – user1031054

+0

@ user1031054 zobacz zmiany. – EJP

+0

dobry artykuł ldap: http://www.zytrax.com/books/ldap/ – cleverpig

0

Sprawdź Fortecę. Jest zgodny z ANSI RBAC INCITS 359 i zbudowany na LDAP. Kod źródłowy to open source i możesz pobrać gotowe pliki binarne zawierające OpenLDAP: http://iamfortress.org/

2

Jeszcze jedna opcja: sprawdź kontrolę dostępu opartą na atrybutach (). ABAC jest ewolucją RBAC. Używa atrybutów (które są etykietami dotyczącymi użytkownika, zasobu, kontekstu) i zasad, aby określić, co jest dozwolone, a co nie.

Przykład: użytkownik z rolą == menedżer w dziale == sprzedaż może wykonać czynność == edycja na dokumencie typu == zamówienie zakupu, jeśli kwota zamówienia < = limit zatwierdzenia użytkownika.

Możesz przeczytać więcej na temat ABAC pod numerem NIST website.