Usare i token OAuth nell'autenticazione del servizio app Azure

Questo articolo illustra come usare i token OAuth durante l'uso dell'autenticazione e dell'autorizzazione predefiniti in servizio app.

Recuperare i token nel codice dell'app

Dal codice server, i token specifici del provider vengono inseriti nell'intestazione della richiesta, in modo che sia possibile accedervi facilmente. La tabella seguente mostra i nomi di intestazioni token possibili:

Provider Nomi dell'intestazione
Microsoft Entra ID X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Token di Facebook X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
X-MS-TOKEN-FACEBOOK-EXPIRES-ON
Google X-MS-TOKEN-GOOGLE-ID-TOKEN
X-MS-TOKEN-GOOGLE-ACCESS-TOKEN
X-MS-TOKEN-GOOGLE-EXPIRES-ON
X-MS-TOKEN-GOOGLE-REFRESH-TOKEN
Twitter X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Nota

Framework di linguaggio diversi possono presentare queste intestazioni al codice dell'app in formati diversi, ad esempio lettere minuscole o maiuscole.

Dal codice client (ad esempio un'app per dispositivi mobili o JavaScript nel browser), inviare una richiesta HTTP GET a /.auth/me (l'archivio token deve essere abilitato). Il codice JSON restituito include i token specifici del provider.

Nota

I token di accesso consentono l'accesso alle risorse del provider, quindi sono presenti solo se si configura un provider con un segreto client. Per informazioni su come ottenere i token di aggiornamento, vedere Aggiornare i token di accesso.

Aggiornare i token di autenticazione

Quando il token di accesso del provider (non il token di sessione) scade, è necessario autenticare nuovamente l'utente prima di riutilizzare tale token. È possibile evitare la scadenza del token eseguendo una chiamata di GET nell'endpoint /.auth/refresh dell'applicazione. Quando viene chiamato, servizio app aggiorna automaticamente i token di accesso nell'archivio token per l'utente autenticato. Le successive richieste di token dal codice dell'app ottengono i token aggiornati. Affinché l'aggiornamento dei token funzioni, tuttavia, l'archivio di token deve contenere i token di aggiornamento per il provider. Il modo per ottenere i token di aggiornamento dipende dal provider, ma di seguito viene riportato un breve riepilogo:

  • Google: aggiungere un parametro di stringa di query access_type=offline alla chiamata API di /.auth/login/google. Per altre informazioni, vedere Token di aggiornamento Google.

  • Facebook: non vengono forniti token di aggiornamento. I token di lunga durata scadono dopo 60 giorni. Vedere Scadenza ed estensione dei token d'accesso di Facebook.

  • Twitter: i token di accesso non scadono. Vedere le domande frequenti su OAuth di Twitter.

  • Microsoft: in https://resources.azure.comeseguire la procedura seguente:

    1. Nella parte superiore della pagina selezionare Lettura/scrittura.

    2. Nel browser a sinistra passare alle sottoscrizioni><subscription_name>>resourceGroups><resource_group_name>>provider>Microsoft.Web>sites<>app_name>>config>authsettingsV2.

    3. Fare clic su Modifica.

    4. Modificare la proprietà seguente.

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. Fare clic su Put.

    Nota

    L'ambito che fornisce un token di aggiornamento è offline_access. Vedere come viene usato in Esercitazione: Autenticare e autorizzare gli utenti end-to-end nel servizio app Azure. Gli altri ambiti sono richiesti per impostazione predefinita da servizio app già. Per informazioni su questi ambiti predefiniti, vedere OpenID Connessione Ambiti.

Dopo aver configurato il provider è possibile trovare il token di aggiornamento e l'ora di scadenza del token di accesso nell'archivio token.

Per aggiornare il token di accesso in qualsiasi momento, è sufficiente chiamare /.auth/refresh in qualsiasi lingua. Il frammento di codice seguente usa jQuery per aggiornare i token di accesso da un client JavaScript.

function refreshTokens() {
  let refreshUrl = "/.auth/refresh";
  $.ajax(refreshUrl) .done(function() {
    console.log("Token refresh completed successfully.");
  }) .fail(function() {
    console.log("Token refresh failed. See application logs for details.");
  });
}

Se un utente revoca le autorizzazioni concesse all'app, la chiamata a /.auth/me può avere esito negativo, con una risposta 403 Forbidden. Per diagnosticare gli errori, controllare i log dell'applicazione per informazioni dettagliate.

Estendere il periodo di tolleranza della scadenza del token di sessione

La sessione autenticata scade dopo 8 ore. Dopo la scadenza di una sessione autenticata, è previsto per impostazione predefinita un periodo di tolleranza di 72 ore. Durante questo periodo di tolleranza, è possibile aggiornare il token di sessione con il servizio app senza dover ripetere l'autenticazione dell'utente. È sufficiente chiamare /.auth/refresh quando il token di sessione non è più valido e non è necessario tenere traccia della scadenza del token. Una volta trascorso il periodo di tolleranza di 72 ore, l'utente deve eseguire di nuovo l'accesso per ottenere un token di sessione valido.

Se 72 ore non sono sufficienti, è possibile estendere questo intervallo di scadenza. L'estensione della scadenza per un lungo periodo potrebbe avere implicazioni significative sulla sicurezza (ad esempio quando un token di autenticazione viene perso o rubato). È quindi consigliabile lasciare l'impostazione predefinita di 72 ore o impostare il periodo di estensione sul valore più piccolo possibile.

Per estendere l'intervallo di scadenza predefinito, eseguire il comando seguente in Cloud Shell.

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

Nota

Il periodo di tolleranza si applica solo alla sessione autenticata del servizio app e non ai token dei provider di identità. Non è previsto alcun periodo di tolleranza per i token dei provider scaduti.

Passaggi successivi