Partager via


Utiliser des jetons OAuth dans le cadre de l’authentification Azure App Service

Cet article vous montre comment utiliser les jetons OAuth lorsque vous utilisez l’authentification et l’autorisation intégrées dans Azure App Service.

Récupérer les jetons dans le code de l'application

À partir de votre code serveur, les jetons spécifiques au fournisseur sont injectés dans l'en-tête de la requête afin que vous puissiez y accéder facilement.

Le tableau suivant répertorie les noms d’en-tête de jeton possibles :

Fournisseur Noms des en-têtes
Microsoft Entra X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Jeton 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
X X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Remarque

Différentes infrastructures de langage peuvent présenter ces en-têtes au code d’application dans différents formats, tels que en minuscule ou en utilisant des lettres majuscules.

À partir de votre code client (par exemple, une application mobile ou un navigateur JavaScript), envoyez une requête GET HTTP à /.auth/me (le magasin de jetons doit être activé). La réponse JSON retournée contient les jetons spécifiques au fournisseur.

Remarque

Les jetons d'accès servent à accéder aux ressources du fournisseur. Ils ne sont donc présents que si vous configurez votre fournisseur avec un secret client.

Actualiser les jetons d’authentification

Lorsque le jeton d'accès de votre fournisseur (et non le jeton de session) expire, vous devez réauthentifier l’utilisateur avant de réutiliser ce jeton. Vous pouvez éviter l’expiration du jeton en effectuant un appel GET au point de terminaison /.auth/refresh de votre application. Lorsqu’il est appelé, App Service actualise automatiquement les jetons d’accès dans le magasin de jetons pour l’utilisateur authentifié. Les demandes de jeton suivantes effectuées via le code de votre application permettent d’obtenir les jetons actualisés. Toutefois, pour que l’actualisation des jetons soit effective, le magasin de jetons doit contenir les jetons d’actualisation pour votre fournisseur. La manière d'obtenir des jetons d'actualisation est documentée par chaque fournisseur, mais la liste suivante est un bref résumé :

  • Google : ajouter un paramètre de chaîne de requête access_type=offline à votre appel d’API /.auth/login/google. Pour plus d’informations, consultez Jetons d’actualisation Google.

  • Facebook : ne fournit pas de jetons d’actualisation. Les jetons de longue durée expirent dans 60 jours (voir Jetons d’accès de longue durée).

  • X : Les jetons d'accès n'expirent pas (voir la FAQ OAuth).

  • Microsoft : Dans https://resources.azure.com, effectuez les étapes suivantes :

    1. En haut du volet, sélectionnez Lecture/écriture.

    2. Dans le menu de l’explorateur, accédez à abonnements>nom d’abonnement>resourceGroups>nom de groupe de ressources>fournisseurs>Microsoft.Web>sites>nom de l’application>config>authsettingsV2.

    3. Sélectionnez Modifier.

    4. Modifiez la propriété suivante :

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. Sélectionnez Mettre.

    Remarque

    L’étendue qui vous donne un jeton d’actualisation est offline_access. Découvrez comment il est utilisé dans le Didacticiel : Authentifier et autoriser les utilisateurs de bout en bout dans Azure App Service. Les autres étendues sont déjà demandées par App Service par défaut. Pour plus d’informations sur ces étendues par défaut, consultez Étendues OpenID Connect.

Une fois votre fournisseur configuré, vous pouvez trouver le jeton d'actualisation et le délai d'expiration du jeton d'accès dans le magasin de jetons.

Pour actualiser votre jeton d'accès à tout moment, appelez /.auth/refresh dans n'importe quelle langue. L’extrait de code suivant utilise jQuery pour actualiser vos jetons d’accès à partir d’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.");
  });
}

Si un utilisateur révoque les autorisations accordées à votre application, votre appel à /.auth/me peut échouer avec une réponse 403 Forbidden. Pour diagnostiquer les erreurs, consultez vos journaux d’activité d’application pour obtenir des informations supplémentaires.

Étendre la période de grâce d’expiration de jeton de session

La session authentifiée expire au bout de 8 heures. Après l'expiration d'une session authentifiée, une période de grâce de 72 heures suit par défaut. Au cours de cette période de grâce, vous pouvez actualiser le jeton de session via App Service sans réauthentifier l’utilisateur. Vous pouvez simplement appeler /.auth/refresh lorsque jeton de session n’est plus valide. Vous n’avez pas besoin de vérifier vous-même les dates d’expiration des jetons. Une fois le délai de grâce de 72 heures expiré, l'utilisateur doit se reconnecter pour obtenir un jeton de session valide.

Si le délai de 72 heures n’est pas suffisamment long pour vous, vous pouvez étendre cette fenêtre d’expiration. Étendre la fenêtre d’expiration sur une longue période peut avoir une incidence majeure sur la sécurité (par exemple lorsqu’un jeton d’authentification est divulgué ou volé). Nous vous recommandons de laisser le paramètre par défaut de 72 heures ou de définir la période d'extension sur la valeur la plus petite.

Pour prolonger la fenêtre d’expiration par défaut, exécutez la commande suivante dans Azure Cloud Shell.

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

Remarque

La période de grâce s'applique uniquement à la session authentifiée App Service, et non aux jetons des fournisseurs d'identité. Il n’existe pas de période de grâce pour les jetons de fournisseur expirés.