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 | 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 |
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 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)).
X : Les jetons d'accès n'expirent pas (voir la FAQ OAuth).
Microsoft : Dans https://resources.azure.com, effectuez les étapes suivantes :
En haut de la page, sélectionnez Lecture/écriture.
Dans le navigateur de gauche, accédez à subscriptions><nom-abonnement>>resourceGroups><nom-groupe-ressources>>providers>Microsoft.Web>sites><nom-application>>config>authsettingsV2.
Cliquez sur Modifier.
Modifiez la propriété suivante.
"identityProviders": { "azureActiveDirectory": { "login": { "loginParameters": ["scope=openid profile email offline_access"] } } }
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 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 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é.