W jaki sposób dostawca JACC może korzystać z funkcji mapowania typu Principal-to-role serwera, na którym jest wdrożony?

154

Piszę JACCdostawcę.

Po drodze oznacza to wdrożenie pliku PolicyConfiguration.

PolicyConfigurationJest odpowiedzialny za przyjmowanie informacji konfiguracyjnych z serwera aplikacji, takich jak uprawnienia, które przypadają na które role. Dzieje się tak, aby Policypóźniej mógł podejmować decyzje dotyczące autoryzacji po przekazaniu informacji o bieżącym użytkowniku i tym, co próbuje zrobić.

Jednak nie jest częścią PolicyConfiguration(okropnego) kontraktu utrzymywanie mapowania między rolami i ich uprawnieniami, Principalsktóre są przypisane do tych ról.

Zazwyczaj - zawsze, naprawdę - to mapowanie jest przechowywane na serwerze aplikacji. Na przykład, na GlassFish, to wpływa to odwzorowanie poprzez dostarczanie rzeczy jak sun-web.xmli sun-ejb-jar.xmli tak dalej ze swoimi modułami Java EE. (Te pliki specyficzne dla dostawcy są odpowiedzialne za np. superusersOkreślenie grupy, do której ma zostać przypisana rola aplikacji admins).

Chciałbym ponownie wykorzystać funkcjonalność dostarczaną przez te pliki i chciałbym to zrobić dla jak największej liczby serwerów aplikacji.

Oto - całkowicie arbitralnie - podejście IBM do sprawy, które wydaje się potwierdzać moje podejrzenie, że to, co chcę zrobić, jest w zasadzie niemożliwe . (Więcej amunicji w moim przypadku, że ten konkretny kontrakt Java EE nie jest wart papieru, na którym jest wydrukowany.)

Moje pytanie: w jaki sposób uzyskać informacje o odwzorowaniu zasady na rolę w - na początek - Glassfish i JBoss z poziomu PolicyConfiguration? Jeśli istnieje standardowy sposób na zrobienie tego, którego nie jestem świadomy, mam wszystkie uszy.

Laird Nelson
źródło
7
Czy zrobiłeś jakiś postęp w tej kwestii? Chciałbym również napisać dostawcę JACC, a także dostawcę uwierzytelniania JASPIC w celu tworzenia przenośnych aplikacji internetowych ...
perissf
To też nie brzmi zbyt obiecująco: Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.Zobacz docs.oracle.com/cd/E24329_01/web.1211/e24485/ ...
Arjan Tijms,
2
W tej chwili uważam, że musisz zawsze upewnić się, że Twój dostawca JACC jest powiązany z dostawcą JASPIC, do którego masz obowiązek napisać. Nie poszedłem jeszcze tą trasą, ale muszę spróbować.
Laird Nelson
@LairdNelson, jeśli masz czas, prawdopodobnie powinieneś napisać odpowiedź wokół swojego komentarza JASPIC. Brzmi obiecująco, a za to pytanie jest 300 nagród za reputację.
jimhark
5
Cześć; nie próbować nikogo trzymać w napięciu. :-) Nie mam tutaj odpowiedzi, którą mógłbym szybko zebrać. Przypominam sobie, jak Ron Monzillo doradzał mi, że jedynym sposobem na przeniesienie zadań „od dyrektora do roli” dostawcy JACC w sposób, który jest dla niego zrozumiały, jest efektywne połączenie z nim implementacji JASPIC.
Laird Nelson

Odpowiedzi:

3

Krótka odpowiedź brzmi: nie ma na to standardowego sposobu.

Chociaż Glassfish i JBoss obsługują odwzorowania typu „Principal-to-role”, JACC nie zakłada, że ​​robią to wszystkie kontenery, więc deleguje odpowiedzialność za przechowywanie tych mapowań do implementacji dostawcy JACC. Z dokumentacji (patrz: PolicyConfiguration.addToRolemetoda ):

Zadaniem dostawcy zasad jest zapewnienie, że wszystkie uprawnienia dodane do roli są nadawane podmiotom głównym „zamapowanym na rolę”.

Innymi słowy, musisz zaimplementować to samodzielnie w swoim dostawcy JACC dla każdego kontenera. Na przykład w przypadku JBoss można użyć jednej z podklas AbstractRolesMappingProvider.

Diego
źródło
Nawiasem mówiąc, przenośny dostawca może zignorować mapowanie roli kontenera; mógłby np. założyć, że jakikolwiek podmiot główny implikuje rolę aplikacji o tej samej nazwie, chyba że aplikacja w jakiś sposób (na przykład za pośrednictwem PolicyContextHandlerspecjalnie zarejestrowanego w tym celu przez dostawcę) przekazuje inaczej. Inny dostawca mógłby równie dobrze zignorować pojęcie ról (a tym samym dostarczonego kontenera PolicyConfiguration), zamiast tego działać wyłącznie na (dostarczonych przez aplikację) mapowaniach jednostki głównej do uprawnień (i gdzie te uprawnienia nie muszą być ograniczone do uprawnień JACC).
Uux
Uwaga dodatkowa nr 2: Od wersji Java EE 8, mapowanie grup do ról 1: 1 stało się nowym domyślnym (co jednak prowadzi nas tylko do połowy drogi, ponieważ role muszą być nadal zadeklarowane statycznie z góry - zakładając, że żaden niestandardowy dostawca JACC nie jest w efekcie).
Uux