Autenticazione per applicazioni web

Nelle ultime settimane ho affrontato il problema di scegliere il metodo di autenticazione ed autorizzazione migliore per una serie di applicazioni che dovranno dialogare tra loro e condividere alcune informazioni.

Dopo le prime ricerche su Google è apparso chiaro che c’è molta confusione sull’argomento sia per quanto riguarda gli standard di riferimento sia sul modo di implementare le specifiche nelle diverse tecnologie. Le informazioni disponibili sono molte ed eterogenee, ma spesso poco accurate e precise. Questa serie di post nasce dall’esigenza i riordinare e selezionare gli appunti raccolti da diverse fonti di informazioni presenti su internet.

Per fare ordine iniziamo dalle basi:

HTTP Access Authentication Framework

La specifica RFC 7235 – Hypertext Transfer Protocol (HTTP/1.1): Authentication definisce i metodi di autenticazione utilizzabili con il protocollo HTTP.

In generale lo standard prevede una serie di metodi una “challage” da parte del serve verso il client che richiede l’accesso ad una risorsa protetta. Il flusso di informaizoni è quello rappresentato nel disegno:

  1. Il server risponde alla richiesta del client con una risposta 401 Unauthorized e fornisce le informazioni al client su come ottenere l’autorizzazione utilizzando l’header WWW-Authenticate.
  2. Il client ottiene le credenziali di accesso richieste ed invia una nuova richiesta al server includendo le credenziali nell’header Authorization.  Per ottenere le credenziali il client può ad esempio mostrare all’utente una finestra di dialogo in cui digitare username e password.
  3. Il server verifica le credenziali fornite. Se la verifica ha esito positivo il server risponde con status code 200 OK e restituisce la risorsa richiesta. In caso di esito negativo della validaizone delle credenziali la risposta sarà 403 Forbidden.

httpauth

WWW-Authenticate and Proxy-Authenticate headers

Gli header WWW-Authenticate e Proxy-Authenticate nella risposta del server devono definire il metodo da utilizzare per ottenere accesso all risorsa richiesta. Il formato dei due header è il seguente:

WWW-Authenticate: <type> realm=<realm>
Proxy-Authenticate: <type> realm=<realm>

Dove <type> definisce “authentication scheme”  da utilizzare (ad esempio “Basic”) e <realm> specifica area per la quale si deve richiedere l’accesso.  is used to describe the protected area or to indicate the scope of protection. Questo campo può contenere un messaggio del tipo “Accesso all’ambiente di collaudo”.

Authorization and Proxy-Authorization headers

GLi headers Authorization e Proxy-Authorization contengono le credenziali che con le quali il client si autentica per richiedere accesso alla risorsa richiesta.

Il formato di questi header è il seguente:

Authorization: <type> <credentials>
Proxy-Authorization: <type> <credentials>

Dove <type> definisce il tipo di authentication schema da utilizzare e <credential> contiene le credenziali opportunamente codificate o cifrate in base allo specifico schema utilizzato.

Authentication schemes

Un altro elemento presente nello standard RFC 7235 è l’elenco degli authentication schemes, per i quali è stato istituito un apposito registro IANA.

The “Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry” defines the namespace for the authentication schemes in challenges and credentials. It has been created and is now maintained at <http://www.iana.org/assignments/http-authschemes>.

Oltre a quelli riportati nell’registro ufficiale IANA esistono altri “authentication schema” come ad esempio quello utilizzato da Amazon AWS e le API Key.

Per la mia personale esperienza i metodi di autenticazione più comunemente usati nelle applicazioni web attuali sono:

  • Basic (see RFC 7617, base64-encoded credentials. See below for more information.),
  • Digest (see RFC 7616),
  • Bearer Token (see RFC 6750, bearer tokens to access OAuth 2.0-protected resources),
  • API Key,
  • JWT,
  • OpenId Connect,
  • SAML
Annunci

Una risposta a "Autenticazione per applicazioni web"

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...