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

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

Récupérer des jetons dans le code d’application

À partir de votre code serveur, les jetons spécifiques au fournisseur sont ajoutés dans l’en-tête de requête, afin que vous puissiez y accéder facilement. Le tableau suivant présente les noms d’en-tête de jeton possibles :

Fournisseur Noms des en-têtes
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
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
Twitter X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Notes

Différentes infrastructures de langage peuvent présenter ces en-têtes au code d’application dans différents formats, tels que des minuscules ou des 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.

Notes

Les jetons d’accès permettent d’accéder aux ressources du fournisseur. Ils ne s’affichent donc que si vous configurez votre fournisseur avec une clé secrète client. Pour savoir comment obtenir des jetons d’actualisation, consultez Actualiser des jetons d’accès.

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 procédure pour obtenir des jetons d’actualisation est fournie par chaque fournisseur. La liste suivante en fournit toutefois 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 au bout de 60 jours (voir Facebook Expiration and Extension of Access Tokens (Expiration et prolongation des jetons d’accès Facebook)).

  • Twitter : les jetons d’accès n’expirent pas (voir les questions fréquentes sur Twitter OAuth).

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

    1. En haut de la page, sélectionnez Lecture/écriture.

    2. Dans le navigateur de gauche, accédez à subscriptions><nom-abonnement>>resourceGroups><nom-groupe-ressources>>providers>Microsoft.Web>sites><nom-application>>config>authsettingsV2.

    3. Cliquez sur Modifier.

    4. Modifiez la propriété suivante.

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. Cliquez sur Put.

    Notes

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

Une fois que votre fournisseur est configuré, vous pouvez rechercher le jeton d’actualisation et l’heure d’expiration pour le jeton d’accès dans le magasin de jetons.

Pour actualiser votre jeton d’accès à tout moment, il vous suffit d’appeler /.auth/refresh dans n’importe quel langage. 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 expiration d’une session authentifiée, une période de grâce de 72 heures s’applique 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. À la fin de la période de grâce de 72 heures, l’utilisateur doit se connecter à nouveau 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 donc de conserver la valeur par défaut de 72 heures ou de définir la période d’extension sur la valeur minimale.

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

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

Notes

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

Étapes suivantes