In che modo un provider JACC può utilizzare le funzionalità di mapping Principal to Role del server su cui è distribuito?


154

Sto scrivendo un JACCfornitore.

Lungo la strada, questo significa implementare a PolicyConfiguration.

Il PolicyConfigurationè responsabile per accettare le informazioni di configurazione dal server di applicazioni, come ad esempio le autorizzazioni maturano a quali ruoli. In questo modo, in Policyseguito, è possibile prendere decisioni di autorizzazione quando vengono fornite informazioni sull'utente corrente e su ciò che sta cercando di fare.

Tuttavia, non fa parte del PolicyConfigurationcontratto (atroce) mantenere una mappatura tra i ruoli e le loro autorizzazioni e Principalsche sono assegnati a tali ruoli.

Tipicamente - sempre, davvero - un server delle applicazioni ospita questa mappatura. Ad esempio, su Glassfish, si influisce questa mappatura fornendo le cose come sun-web.xmle sun-ejb-jar.xmle così via con i moduli Java EE. (Questi file specifici del fornitore sono responsabili di dire, ad esempio, superusersè un gruppo a cui deve essere assegnato il ruolo dell'applicazione admins.)

Vorrei riutilizzare la funzionalità fornita da questi file e vorrei farlo per una gamma quanto più ampia possibile di server applicazioni.

Ecco, in modo totalmente arbitrario, il punto di vista di IBM sulla questione, che sembra confermare il mio sospetto che ciò che voglio fare sia essenzialmente impossibile . (Altre munizioni per il mio caso che questo particolare contratto Java EE non vale la carta su cui è stampato.)

La mia domanda: come posso ottenere queste informazioni di mappatura dal principio al ruolo in - per cominciare - Glassfish e JBoss dall'interno di un PolicyConfiguration? Se c'è un modo standard per farlo di cui non sono a conoscenza, sono tutto orecchi.


7
Hai fatto progressi su questo problema? Vorrei anche scrivere un provider JACC e anche un provider di autenticazione JASPIC per creare applicazioni Web portatili ...
perissf

Anche questo non sembra molto promettente: Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.vedi docs.oracle.com/cd/E24329_01/web.1211/e24485/…
Arjan Tijms,

2
La mia opinione al momento è che devi sempre assicurarti che il tuo fornitore JACC sia associato a un fornitore JASPIC che sei quindi anche obbligato a scrivere. Non ho ancora seguito questa strada ma è sul mio tavolo da provare.
Laird Nelson,

@LairdNelson, se hai tempo, probabilmente dovresti scrivere una risposta attorno al tuo commento JASPIC. Sembra promettente, e c'è una generosità di 300 reputazione su questa domanda.
Jimhark,

5
Ciao; non cercare di mantenere nessuno in sospeso. :-) Non ho una risposta qui che potrei montare in fretta. Ricordo solo Ron Monzillo che mi consigliò che l'unico modo per ottenere incarichi da principale a ruolo "in" un fornitore JACC in un modo che potesse capire è avere l'implementazione JASPIC effettivamente associata.
Laird Nelson,

Risposte:


3

La risposta breve è: non esiste un modo standard per farlo.

Sebbene Glassfish e JBoss supportino le mappature da principio a ruolo, JACC non presume che tutti i contenitori lo facciano, quindi delega la responsabilità di mantenere tali mappature nell'implementazione del provider JACC. Dai documenti (vedi: PolicyConfiguration.addToRolemetodo ):

È compito del fornitore della politica garantire che tutte le autorizzazioni aggiunte a un ruolo siano concesse ai direttori "mappati al ruolo".

In altre parole, è necessario implementarlo nel proprio provider JACC per ciascun contenitore. Per JBoss, ad esempio, è possibile utilizzare una delle sottoclassi di AbstractRolesMappingProvider.


A parte questo, un provider portatile potrebbe scegliere di ignorare la mappatura dei ruoli del contenitore; potrebbe ad esempio supporre che qualsiasi entità principale implichi un ruolo applicativo con lo stesso nome, a meno che l'applicazione in qualche modo (tramite uno PolicyContextHandlerspecificamente registrato dal fornitore a tale scopo, ad esempio) trasmetta diversamente. Un altro fornitore potrebbe anche ignorare del tutto la nozione di ruoli (e quindi il contenitore fornito PolicyConfiguration), operando invece esclusivamente su mappature da principio a permesso (fornite dall'applicazione) (e dove tali autorizzazioni non devono essere limitate a quelle di JACC).
Uux,

Nota a margine # 2: A partire da Java EE 8, la mappatura da gruppo a ruolo 1: 1 è diventata la nuova impostazione predefinita (che tuttavia ci porta solo a metà strada, poiché i ruoli devono ancora essere dichiarati staticamente in anticipo - supponendo che nessun provider JACC personalizzato sia in effetti).
Uux,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.