Azure Active Directory: Access e Refresh Token

Sono passati quasi sei mesi (era il luglio 2018) da quando Microsoft ha cambiato le politiche e le tempistiche di scadenza dei Refresh Token nell’autenticazione di Azure Active Directory con i servizi di Office365. Questo cambio di politica ha fatto risparmiare il 20% delle richieste di credenziali agli utenti riducendone notevolmente lo stress.

L’amministratore lungimirante avrà fatto di tutto per abilitare la Modern Authetication basata sui protocolli Oauth2 e OpenID Connect anche nei servizi Exchange Online e Skype for Business mentre in SharePoint Online e Teams è già abilitata di default.

Come funziona

Quando un utente accede per la prima volta ad un servizio di Office365 si deve autenticare su AzureAD usando le proprie credenziali per ricevere la coppia di Token (Access e Refresh). L’Access Token, rilasciato dall’Autentication Server, viene utilizzato dal Client per accedere alle risorse ed ha una durata limitata, in genere 1 ora. Il Refresh Token viene utilizzato dal Client per richiedere un nuovo Access Token al fine di rimanere connesso alla risorsa corrente oppure per accedere ad una nuova risorsa per la prima volta. Se il Client ritiene che il sistema operativo sia sicuro per memorizzare e gestire il Refresh Token propone all’utente di “Rimanere Connesso”. Rispondendo affermativamente si attiva il KMSI (Keep Me Signed In) autorizzando il Refresh Token a non scadere più.

Figura 1 – Flusso di Access e Refresh Token per l’accesso alla Risorsa

A: L’utente esegue il logon inserendo le proprie credenziali in quanto è la prima volta che accede alla risorsa

B: L’utente sceglie di “Rimanere Connesso” (KMSI) e riceve i Token

C: L’utente chiede di accedere alla risorsa presentando l’Access Token

D: L’utente accede alla risorsa perché l’Access Token è valido

E: Durante l’uso dell’applicazione l’utente invia periodicamente l’Access Token

F: L’Access Token è scaduto e l’utente non può più accedere alla risorsa ma…

G: Il browser usa il Refresh Token per ricevedere un nuovo Access Token

H: L’utente riceve i nuovi Token e continuerà ad accedere alla risorsa senza alcuna richiesta di autenticazione

Il flusso di Token e di accessi alle risorse funziona bene e senza disturbare l’utente fino a quando non si resetta la password. Appena Azure Active Directory (Authorization Server) viene a conoscenza di questo fatto revoca tutti i Refresh Token emessi dall’utente. La revoca dei Refresh Token impedisce il passo G del flusso precedente forzando, di fatto, la ripartenza dal passo A per tutti i client ai quali sono stati rilasciati i Refresh Token. Altra condizione che determina la scadenza del Refresh Token è l’inattività di quest’ultimo (MaxInactiveTime) che varia in base alla risorsa richiesta, il default è 90 giorni. Quindi un utente che ha selezionato di “Rimanere Connesso” può riaprire il browser e riaccedere alla risorsa senza inserire alcuna credenziale grazie al valore MaxInactiveTime del Refresh Token.

Scadenza password

Un punto di attenzione merita il lasso di tempo che intercorre tra la scadenza della password ed il suo rinnovo. In questo periodo di tempo il Refresh Token continua a rimanere valido e a garantire l’accesso alla risorsa. Quindi un utente che accedere quotidianamente alla solita risorsa potrebbe non accorgersi mai della scadenza della password. Per ovviare a questo comportamento predefinito è possibile creare uno script che analizzi tutti gli utenti e revochi i loro Refresh Token alla scadenza della password (basato sul comando Revoke-AzureADUserAllRefreshToken). Altra indicazione, per coloro che usano Active Directory Federation Services, è configurare la scadenza password come claim passato alla risorsa acceduta che notificherà all’utente un messaggio.

Riferimenti

Si riportano alcuni riferimenti utili per ulteriori approfondimenti:

Aumento dei tempi di validità dei Token in AzureAD

Session timeout nei servizi di Office365

Revoca dei Refresh Token

Forzare la revoca dei Refresh Token con powershell

Notificare la scadenza password con ADFS

Conclusioni

I protocolli Oauth2 e OpenID Connect sono molto comodi perché garantiscono all’utente un accesso sicuro alle risorse in cloud dal proprio PC senza continue richieste di credenziali. E’ necessario capirne il funzionamento ed il comportamento di default per decidere consapevolmente se cambiare alcuni parametri oppure eseguire script PowerShell per variare le logiche di revoca dei Refresh Token.