Piszę JACC
dostawcę.
Po drodze oznacza to wdrożenie pliku PolicyConfiguration
.
PolicyConfiguration
Jest odpowiedzialny za przyjmowanie informacji konfiguracyjnych z serwera aplikacji, takich jak uprawnienia, które przypadają na które role. Dzieje się tak, aby Policy
póź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, Principals
któ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.xml
i sun-ejb-jar.xml
i tak dalej ze swoimi modułami Java EE. (Te pliki specyficzne dla dostawcy są odpowiedzialne za np. superusers
Okreś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.
źródło
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/ ...Odpowiedzi:
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.addToRole
metoda ):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
.źródło
PolicyContextHandler
specjalnie 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 konteneraPolicyConfiguration
), 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).