2014-04-24 16 views
8

Attualmente sto lavorando a un'applicazione Web basata su Java EE 7, PostgreSQL e sul server di applicazione GlassFish 4. Devo implementare un'autenticazione basata su modulo e per proteggere alcuni URL sapendo che:Java EE 7 Autenticazione basata su modulo

  • gli utenti e i ruoli/gruppi (qualunque siano chiamati) sono memorizzati nel database.
  • Volevo che la mia richiesta di essere il più "standard", come possibile (cioè Attualmente sto usando JSF e JPA, e nessun altro quadro come la primavera, si pavoneggia ...)

Dopo alcune ricerche, ho scoperto che Java EE ha fornito un meccanismo di autenticazione standard chiamato JASPIC. Quindi, ho concentrato la mia ricerca su JASPIC e ho letto più Stackoverflow Q/A e quegli articoli scritti da Arjan Tijms (È quasi impossibile trovare uno Stackoverflow Q/A relativo a Java EE senza una delle sue risposte o commenti, grazie a lui da tra l'altro):

la mia domanda è: sarà JASPIC mi permetterà di fare quello che mi serve (autenticazione forma + restrizione URL con i ruoli) ed è vale la pena usarlo? Quello che voglio dire è: è forse più sicuro e più facile da usare un altro meccanismo.

Arjan Tijms afferma inoltre che l'utilizzo di JASPIC è "una specie di problema di gallina e uova" e se JASPIC è sicuro da utilizzare (non crea più problemi di quanti ne risolva), indipendentemente dall'importo di codice che ho bisogno di scrivere, voglio davvero essere "uno dei primi polli".

+2

La sicurezza è di aumentare la sicurezza, non di farla rispettare. Sei sicuro solo quanto il link più debole nel tuo ambiente di runtime di sistema, spesso quel collegamento più debole è un essere umano. Nella mia onesta opinione tutto ciò che devi sapere per prendere una decisione è nel primo (meraviglioso) link che hai postato. Grazie per averlo condiviso, a proposito. A parte questo, c'è anche la pagina delle esercitazioni JEE sulla sicurezza: http://docs.oracle.com/javaee/6/tutorial/doc/gkbaa.html – Gimby

risposta

-4

non faccio sapere JASPIC ma mi permetto di suggerire di dare un'occhiata al shiro framework

E ti permette di fare praticamente tutto ciò che serve in base alla post con configurazione minima.

+1

In genere evito di usare framework come Shiro a meno che non preveda di assumere il controllo di l'intera autenticazione/autorizzazione dell'applicazione solo in un livello Web. Principalmente perché la piattaforma di destinazione non supporta l'intero stack Java EE. –

-4

Per l'autenticazione basata su modulo e l'autorizzazione, è necessario JAAS. passa attraverso follwing url- linK

+1

Le cose sono qualcosa di più sottile in Java EE, dovresti dare un'occhiata a [questo post] (http://arjan-tijms.omnifaces.org/2014/02/jaas-in-java-ee-is-not-universal .html). – bdulac

3

Sto usando JASPIC per la mia autenticazione, ma JASPIC ha una limitazione con cui devi fare i conti (se vuoi le cose standard). Sei limitato a non avere dipendenze al di fuori dell'API Java EE 7. Ciò significa che l'accesso alle risorse JDBC che richiedono un driver non è una funzionalità esplicitamente dichiarata negli standard.

Nel mio OpenID Connect implementation ho usato Google come mio negozio sicuro, che mi presenta anche il modulo di accesso di Google. Questo è un grande esempio di utilizzo di JASPIC.

Per te, puoi esporre un EJB allo spazio dei nomi globale e usare InitialContext per ottenere il bean. Ci sarebbe una certa duplicazione del codice in quanto è necessario copiare il codice dell'interfaccia remota EJB in due punti e assicurarsi che i serialVersionID siano gli stessi su entrambi. L'EJB può essere utilizzato per connettersi alle risorse JPA per ottenere i dati di autorizzazione.

Utilizzare gli EJB, perché le altre due opzioni a cui si potrebbe pensare sono REST e SOAP che potrebbero rivelare qualcosa sulle porte Web e richiederebbero una configurazione aggiuntiva per impedire l'accesso non autorizzato o richiedere che vengano posizionate su un sistema diverso.

Una semplice implementazione JASPIC che ho creato nel caso in cui vogliate imparare è la HTTP Header JASPIC module che è intesa per l'integrazione con sistemi più complessi come SiteMinder.

+0

L'implementazione di questo esempio è geniale! :) –