Angelo Pellegrinon - Divulgazione Open Source e Diario personale

Integrated Windows Authentication (SPNEGO) per applicazioni web con Jboss 7 - Parte 1

Jboss application server 7 Jboss application server 7

Uno degli innegabili benefici che si possono notare nell'uso e consumo delle applicazioni web che girano in ambiente Windows con dominio è la possibilità di utilizzare il single sign on e l'autenticazione integrata come metodo ai autenticazione. Inserendo quindi le proprie credenziali nel momento dell'accesso al dominio si ha accesso alle applicazioni disponibili senza dovere più autenticarsi.

Questa funzionalià è supportata nativamente da Windows con il suo Internet Information Services (IIS) ma può essere realizzata anche su applicazioni web configurate su altri web server o altri sistemi operativi. Per realizzare cio, è necessario implementare una trattativa di credenziali che applica il protocollo Kerberos (in ambiente Windows il servizio in questione è Active Directory) chiamata SPNEGO (Simple and Protected GSS-API Negotiation Mechanism). Il protocollo SPNEGO, come l'NTLM o il BASIC o altri, serve quindi per autenticarsi sul server web, che ovviamente può supportare più metodi di autenticazione: è il client che nel momento del collegamento manderà una lista di protocolli che "conosce" e quali sono i suoi preferiti e il servizio potrà decidere se accettare il preferito, proporne un altro oppure rifiutare direttamente la richiesta. SPNEGO è supportato da una vasta gamma di prodotti e contenitori come Spring, Tomcat e ovviamente JBoss. La sua funzionailtà è attiva in JBoss grazie ad un componente del framework PicketLink chiamato JBoss Negotiation.

Per permettere ad una applicazione web di utilizzare SPNEGO con JBoss occorre svolgere più di una configurazione: all'interno della applicazione, del server JBoss, e del dominio Windows. Online è possibile trovare moltissima documentazione a riguardo, la quale però è anche molto frammentata e spesso non corretta; ecco allora lo scopo di questo (e dei futuri) articoli che è anche lo scopo di questo spazio virtuale: mettere insieme l'esperienza e dilvulgarla così da non farla cadere nell'oblio.

Prima di procedere con le configurazioni cerchiamo di capire come funziona il processo attraverso il quale una applicazione web riesce ad ottenere il nome dell'utente che si sta collegando ad essa attraverso l'autenticazione integrata. Per maggiore chiarezza si può controllare anche l'immagine allegata:

  • Un utente utilizzando il browser si collega ad una applicazione web;
  • Il server risponde che per questa applicazione è necessario utilizzare un meccanismo di autenticazione;
  • Se esiste un rapporto di fiducia tra le parti (perchè utilizzando SPNEGO il client passa direttamente al server le informazioni di autenticazione) ed entrambi supportano il protocollo, allora il Browser contatta Active Directory che agisce come un servizio Kerberos di garanzia dei ticket (TGS) per avere il suo service ticket (ST) che viene utilizzato per dimostrare l'identità del chiamante;
  • Il server che è configurato in Active Directory per essere un principal service (SP) riceve questo "biglietto da visita" e utilizza il suo keytab per collegarsi ad Active Directory e richiedere di decodificare il ticket ricevuto per poi leggerne l'utente di provenienza.

Spiegazione funzionamento SPNEGO.

Non preoccupatevi se al momento la cosa è criptica, nei prossimi articoli cercheremo di entrare in merito a tutte le questioni. In linea generale comunque dovremmo:

  1. Generare e creare una keytab a cui associare un service principal usato dal server JBoss per autenticarsi con Active Directory;
  2. Configurare il server JBoss;
  3. Configurare l'applicazione web;
  4. Configurare il browser del client;
  5. Eventualmente verificare se ci sono alcuni problemi ricorrenti e risolverli.

Lascia un commento

Assicurati di inserire (*) le informazioni necessarie ove indicato.
Codice HTML non è permesso.