Ho un servizio JAX-RS in cui desidero che tutti i miei utenti accedano ai miei servizi, ma solo quelli che hanno i diritti per vedere il risultato. La sicurezza basata sui ruoli e i metodi REALMS e di autenticazione già esistenti non si adattano al mio requisito.Autorizzazione JAX-RS personalizzata - utilizzo del JWT in ogni richiesta
Ad esempio:
- utente viene autenticato contro uno servizio REST e lo mando JWT token con il suo ID
- utente chiede altra risorsa e invia la sua JWT con il suo ID a ogni richiesta
- I controlla il suo id utente (da JWT) e se la logica aziendale restituisce il risultato li rimando, altrimenti invio set di risultati vuoto o stato HTTP specifico
La domanda è: dove devo controllare ID utente, in qualche filtro separato, contesto di sicurezza o in ogni implementazione del metodo REST? Come fornire i metodi REST con questo ID, securityContext può essere iniettato in ogni metodo dopo aver filtrato la richiesta per ID?
Sto utilizzando GlassFish 4.1 e l'implementazione Jersey JAX-RS.
grazie per la risposta. Ho pensato di poter utilizzare ContainerRequestFilter, ma non ho bisogno di ruoli e SecurityContext per il mio requisito. E 'troppo semplice usare solo il filtro servlet, e per ogni richiesta alle risorse REST farei la desmissioning dell'intestazione JWT inviata in precedenza, estrarre le informazioni utente da esso e passarle ai metodi di servizio per determinare i livelli di concessione dell'utente all'interno di ogni mehod? Sembra una semplice soluzione pragmatica che dovrebbe funzionare ... – D00de
Praticamente quello che puoi fare in un filtro servlet, puoi farlo nel ContainerRequestFilter. Ma con quest'ultimo, hai accesso all'applicazione Jersey –
grazie, ho implementato la tua soluzione iniettando dati JWT su User principal e poi recuperato da SecurityContext inject in ogni metodo REST che ho. Ho il mio voto e l'accettazione per il tuo aiuto, signore. – D00de