Comprendre l’autorisation d’API et la mise en cache des jetons

Terminée

La conception du portail d'entreprise comprend la lecture du profil de l'utilisateur connecté à partir de Microsoft Graph. L’authentification identifie l’utilisateur sur le portail, mais un appel d’API a également besoin d’un jeton d’accès avec les autorisations appropriées.

Cette unité explique les types d’autorisations, les portées et un modèle illustratif de cache de jetons MSAL4J. Il ne part pas du principe qu’une application ou une session connectée est en cours d’exécution.

Autorisations et étendues de l’API

Une API protégée définit des autorisations pour ses fonctionnalités et ses données. Microsoft Graph, par exemple, dispose d’autorisations différentes pour lire un profil, lire un calendrier et envoyer des messages. Une application demande uniquement les autorisations nécessaires pour son opération prévue.

Microsoft Entra ID prend en charge deux types d’autorisations :

Type d’autorisation Context Consentement
Autorisations déléguées L’application agit pour le compte d’un utilisateur connecté. L’accès est limité par les autorisations accordées et l’accès de l’utilisateur. Un utilisateur ou un administrateur autorisé peut accorder son consentement, en fonction de l’autorisation et de la stratégie de locataire.
Autorisations d’application L’application agit comme elle-même sans utilisateur connecté, comme un service en arrière-plan. Le consentement de l’administrateur est requis.

Le portail utilise des autorisations déléguées User.Read pour lire le profil de l’utilisateur connecté. Cette autorisation n’accorde pas l’accès aux données de chaque utilisateur ni aux ressources non liées telles que les calendriers.

Les étendues décrivent l’accès demandé

Dans une demande d’autorisation déléguée, les étendues OAuth 2.0 expriment les autorisations demandées par l’application. Une étendue peut identifier à la fois la ressource et l’autorisation ; par exemple, https://graph.microsoft.com/Calendars.Read demande l’autorisation de lecture de calendrier pour Microsoft Graph.

Les exemples utilisent l’étendue User.Readunique . Pour les étendues de Microsoft Graph, l’identificateur de ressource peut être omis ; cela représente https://graph.microsoft.com/User.Read. Pour plus d’informations, consultez Étendues et autorisations.

Les autorisations d’API configurées, les étendues demandées et le consentement sont distinctes. L’ajout d’une autorisation d’API à une inscription d’application n’accorde pas lui-même son consentement ni modifie les étendues demandées par le code de l’application.

Un jeton d’accès est spécifique à son API

Un jeton d’accès est destiné à une ressource particulière. Un jeton pour Microsoft Graph n'est pas interchangeable avec un jeton pour une autre API, et un jeton d'ID n'est pas un remplacement d'un jeton d'accès à l'API.

MSAL4J acquiert et met en cache des jetons. L’application utilise le jeton pour sa ressource prévue plutôt que de l’analyser pour faire des hypothèses sur l’identité de l’utilisateur connecté ou la traiter comme un code d’autorisation réutilisable.

Exemple d’acquisition silencieuse de jeton

Pour les demandes ultérieures, une application web peut demander à MSAL d’obtenir un jeton sans envoyer l’utilisateur via une autre interaction de connexion. Le fragment suivant est adapté de AuthHelperl’échantillon de référence. Il illustre la restauration d’un cache associé à une session et la demande d’un jeton pour un compte déjà représenté dans ce contexte.

final SilentParameters parameters = SilentParameters
                                        .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                        .build();

final ConfidentialClientApplication client = getConfidentialClientInstance();
client.tokenCache().deserialize(context.getTokenCache());

final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();

SilentParameters identifie l’étendue et le compte demandés. Dans cet exemple, Config.SCOPES contient User.Readet context fournit le compte et le cache sérialisé associé à la session authentifiée. Il s’agit d’exemples d’assistance d’application, et non de valeurs que l’apprenant doit obtenir.

Une fois le cache restauré, acquireTokenSilently tente de satisfaire la demande sans interaction utilisateur. Il peut retourner un jeton d’accès mis en cache utilisable ou utiliser un jeton d’actualisation mis en cache le cas échéant. « Silencieux » ne signifie pas nécessairement qu’aucune requête réseau ne se produit.

Ce fragment omet la persistance du cache et la gestion des exceptions environnantes. Si MSAL indique que l’interaction utilisateur est requise, l’application web démarre une nouvelle demande d’autorisation et traite le rappel résultant. Il n’échange plus l’ancien code d’autorisation. D’autres échecs, tels que les erreurs de réseau ou de configuration, nécessitent une gestion des erreurs appropriée plutôt qu’une boucle de connexion inconditionnelle.

Le cache de jetons et les données de session contiennent des informations sensibles. Une application complète doit protéger ces données, l’associer au compte et à la session appropriés, et conserver les modifications du cache de manière appropriée.

Interpréter le résultat avant l’appel d’API

L’acquisition réussie du jeton renvoie un IAuthenticationResult contenant le jeton d’accès ainsi que des informations sur sa durée de vie et le contexte du compte. Pour une requête Microsoft Graph, l’application fournit le jeton d’accès Graph à son client HTTP ou à son fournisseur d’authentification Graph.

MSAL4J ne lit pas le profil d’un utilisateur simplement en acquérant ce jeton. La demande d’API distincte effectue l’opération de données.

Microsoft Graph fournit la ressource

Microsoft Graph expose Microsoft données et services cloud via https://graph.microsoft.com. Le /v1.0/me point de terminaison représente l’utilisateur connecté et nécessite un contexte d’utilisateur délégué.

L’unité suivante étudie un exemple de requête adressée à ce point de terminaison et la requête équivalente via le SDK Java pour Graph. La vue d’ensemble Microsoft Graph décrit l’API plus large.