Logo Logo
GitHub Designed by Logto

Cos’è una URI di reindirizzamento?

Una URI di reindirizzamento, nota anche come URL di callback o URL di reindirizzamento, è una URI che indica dove il Server di autorizzazione dovrebbe reindirizzare l’user-agent dopo che la Richiesta di autorizzazione (Authorization request) è completata.

Gli Universal Resource Identifier (URI) sono spesso confusi con gli URL (Uniform Resource Locator). Per ulteriori informazioni, consulta Unveiling URI, URL, and URN .

Diamo un’occhiata a un esempio di una richiesta di autorizzazione che include una URI di reindirizzamento:

GET /authorize?response_type=code
  &client_id=YOUR_CLIENT_ID
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
  &scope=openid%20profile%20email
  &state=abc123
  &nonce=123456 HTTP/1.1

In questo esempio, il valore grezzo del parametro redirect_uri è https%3A%2F%2Fclient.example.com%2Fcallback, che è codificato in URL. Il valore effettivo è https://client.example.com/callback.

Come funziona una URI di reindirizzamento?

Nel contesto di OpenID Connect (OIDC) , il flusso di lavoro per la Richiesta di autorizzazione (Authorization request) di OAuth 2.0 e il Server di autorizzazione si applica in modo simile. La URI di reindirizzamento funziona allo stesso modo in cui fa in OAuth 2.0, sia per la Richiesta di autenticazione (Authentication request) che per OpenID Provider (OP) .

Supponiamo che il Client avvii la richiesta di autorizzazione dall’URL https://client.example.com. Dopo che l’utente completa il processo di autorizzazione, il server di autorizzazione reindirizzerà l’user-agent (browser) a https://client.example.com/callback.

È chiaro che la URI di reindirizzamento è essenziale affinché il server di autorizzazione possa reindirizzare l’user-agent quando il processo di autorizzazione è completo. Inoltre, la URI di reindirizzamento è utilizzata anche per ricevere il codice di autorizzazione o i token, a seconda del flusso.

Ecco un esempio non normativo di come potrebbe apparire il reindirizzamento effettivo in un Flusso del codice di autorizzazione (Authorization code flow) :

HTTP/1.1 302 Found
Location: https://client.example.com/callback?code=AUTHORIZATION_CODE&state=abc123

Nota che i parametri URL code e state che sono aggiunti dal server di autorizzazione sono inclusi nella URI di reindirizzamento. Il client deve estrarre i parametri code e state dall’URL per continuare il processo di autorizzazione.

Perché abbiamo bisogno di una URI di reindirizzamento?

Come possiamo vedere nell’esempio sopra, il server di autorizzazione deve sapere dove reindirizzare dopo una richiesta di autorizzazione riuscita. È particolarmente utile quando ci sono più client (cioè, Single sign-on (SSO) ), e ogni client ha una diversa URI di reindirizzamento.

Con il Flusso del codice di autorizzazione (Authorization code flow) , la URI di reindirizzamento è utilizzata anche per passare il codice di autorizzazione al client, invece di usare il canale frontale (browser) per evitare di esporre i token a potenziali attacchi.

Era possibile utilizzare il Resource Owner Password Credentials (ROPC) grant per ottenere token per l’utente senza una URI di reindirizzamento. Tuttavia, è deprecato in OAuth 2.1 a causa di problemi di sicurezza.

Considerazioni sulla sicurezza

La URI di reindirizzamento è un parametro critico ed è un obiettivo comune per gli attaccanti. Ecco alcune considerazioni sulla sicurezza da tenere a mente:

  • Whitelist delle URI di reindirizzamento: Il client dovrebbe accettare solo URI di reindirizzamento che sono registrate con il server di autorizzazione. Questo previene che gli attaccanti reindirizzino gli utenti a siti malevoli.
  • Usa HTTPS: Usa sempre HTTPS per la URI di reindirizzamento per proteggere la comunicazione tra il client e il server di autorizzazione.
  • Corrispondenza esatta: La URI di reindirizzamento dovrebbe corrispondere esattamente con la URI registrata. I server di autorizzazione possono imporre regole di corrispondenza rigorose che disabilitano modelli di corrispondenza ampi.
  • Parametro di stato: Usa il parametro state per prevenire attacchi Cross-site request forgery (CSRF) . Il client dovrebbe validare il parametro state per assicurarsi che corrisponda al valore inviato nella richiesta di autorizzazione.

Vedi anche