2013-03-31 21 views
9

Sono alla ricerca di un framework di sicurezza che consenta la sicurezza basata sui ruoli per i servizi OSGi e per i servizi Web CXF. Qualche tempo fa ho già utilizzato la sicurezza di primavera, ma ora che siamo passati al progetto non è più un'opzione per quanto ho capito. Per configurare le regole di accesso mi piacerebbe utilizzare principalmente lo standard @RolesAllowed annotation. Quindi quali sono i miei migliori punti di partenza? Ho anche pensato di implementarlo come estensione del progetto, ma preferirei una soluzione esistente.Sicurezza basata su ruoli per OSGi

+0

Ho configurato Shiro nella mia applicazione, in esecuzione su Karaf. Riesco a configurare il gestore della sicurezza, così posso accedere/uscire, utilizzando le credenziali memorizzate in un DB. Ora sto lottando per trovare un modo per usare quelle annotazioni. Hai trovato una soluzione? – jhamon

+0

Alla fine non ho usato shiro. Invece ho usato CXF JaasLoginFeature. Fa un login jaas usando le credenziali che possono poi essere recuperate dallo stesso thread. Ad esempio il modulo blueprint-authz di aries usa il login jaas. –

+0

CXF Jaas supporta anche una funzionalità simile alla 'Sessione' fornita da Shiro? – jhamon

risposta

8

Suggerirei di andare con Apache Shiro invece, http://shiro.apache.org/.

Fornisce semplici API per l'autenticazione, l'autorizzazione, la crittografia e la gestione delle sessioni. Può anche essere facilmente implementato all'interno di un contenitore OSGI. Alcuni professionisti di Apache Shiro sono elencati qui Apache Shiro vs Java EE native APIs

+0

Shiro è nell'elenco delle strutture che sto studiando. C'è qualche documentazione su come configurarlo per OSGi? Soprattutto sto cercando alcuni esempi/suggerimenti su come usarlo per i servizi OSGi semplici e per i servizi CXF. Gli esempi che ho trovato si riferiscono sempre alle applicazioni java web (servlet). Ad esempio, se creo un servizio OSGi, come faccio a abilitare shiro su di esso e come faccio a rendere onore alle annotazioni di RolesAllowed? O se chiamo il servizio OSGi come faccio ad autenticarmi. Immagino che ci sarà qualche thread locale per contenere le mie informazioni di autenticazione. –

5

Nel frattempo ho creato un'estensione del modello per l'autorizzazione basata su JAAS e Java EE (@RolesAllowed, @PermitAll, @DenyAll). È possibile aggiungere l'estensione a qualsiasi file di progetto. Analizzerà quindi tutti i bean per queste notifiche e intercetterà le chiamate se vengono trovate. Utilizza un contesto JAAS esistente per ottenere i ruoli dell'utente.

Quindi un prerequisito per questo è un accesso JAAS. Ho anche creato una funzione JAASAuthentication CXF che registra un utente in base al principal del nome utente di sicurezza auth o ws di base. Il modulo funziona insieme al supporto JAAS di Apache Karaf. Quindi si applicano tutti gli utenti e i ruoli di Karaf.

Creerò un tutorial per mostrare come utilizzare tutto questo una volta che la versione di progetto dell'aerian che include il modulo di autorizzazione è fuori. Nel frattempo sarei felice se lo provaste e segnalaste eventuali problemi.

Btw. un altro approccio per karaf è il controllo dell'accesso basato sui ruoli per i servizi OSGi incorporato in karaf 3+. Non funziona con le annotazioni ma è anche facile da usare. Vedi http://coderthoughts.blogspot.de/2013/10/role-based-access-control-for-karaf.html

+0

Christian, hai un link per quello che hai fatto, in quanto sarei interessato a fare essenzialmente lo stesso di questo (che significa la tua estensione blueprint) Grazie. –

+0

Questo dovrebbe aiutare https://github.com/cschneider/Karaf-Tutorial/blob/master/cxf/personservice/server/src/main/resources/OSGI-INF/blueprint/blueprint.xml. Le configurazioni commentate attivano il modulo authz per consentire @RolesAllowed e JAASAuthenticationFeature si occupa del login. –

Problemi correlati