Incorporer Microsoft Graph dans des applications web ASP.NET MVC
Dans cette unité, vous allez découvrir comment personnaliser et configurer une application web ASP.NET MVC pour demander et intégrer des données obtenues à partir de Microsoft Graph.
Intégrer Microsoft Graph dans les applications web ASP.NET MVC
La prise en charge de Microsoft Graph dans une application web ASP.NET MVC est facile à ajouter. Le kit de développement logiciel (SDK) Microsoft Graph est distribué via un package NuGet Microsoft Graph.
Obtenir un jeton d’accès pour Microsoft Graph
Toutes les communications avec Microsoft Graph sont gérées via GraphServiceClient
.
GraphServiceClient
doit être configuré de manière à inclure un jeton d’accès dans chaque requête. Par conséquent, une fois l’utilisateur connecté, l’application web doit d’abord obtenir un jeton d’accès. Pour ce faire, le code suivant peut être utilisé :
public async Task<string> GetUserAccessTokenAsync()
{
var idClient = ConfidentialClientApplicationBuilder.Create(appId)
.WithRedirectUri(redirectUri)
.WithClientSecret(appSecret)
.Build();
var tokenStore = new SessionTokenStore(idClient.UserTokenCache,
HttpContext.Current, ClaimsPrincipal.Current);
var accounts = await idClient.GetAccountsAsync();
// By calling this here, the token can be refreshed
// if it's expired right before the Graph call is made
var result = await idClient.AcquireTokenSilent(graphScopes, accounts.FirstOrDefault())
.ExecuteAsync();
return result.AccessToken;
}
Cette méthode commence par créer une instance du client confidentiel défini dans la spécification du protocole OAuth 2. Les clients confidentiels sont des clients qui peuvent disposer d’un ID d’application et d’une clé secrète non présentés à l’utilisateur de l’application. Un autre type de client, le client public, est utilisé dans les applications mobiles ou de bureau, car la clé secrète de l’application doit être distribuée avec le code exécutable de l’application sur l’appareil mobile ou l’ordinateur de bureau de l’utilisateur.
Le client confidentiel est créé à l’aide de l’ID d’application inscrit, de la clé secrète et de l’URI de redirection configuré vers lequel l’utilisateur doit être envoyé une fois connecté avec Microsoft Identity.
Le code obtient ensuite une référence à l’utilisateur actuel et tente de récupérer un jeton d’accès précédemment obtenu à partir du magasin de jetons à l’aide de la méthode AcquireTokenSilent()
. Si la méthode AcquireTokenSilent()
échoue, une connexion interactive doit être présentée à l’utilisateur.
Maintenant que l’application dispose d’un jeton d’accès, elle peut passer à l’étape suivante et créer une instance de GraphServiceClient
.
Créer une instance configurée de GraphServiceClient
Une fois que l’application dispose d’un jeton d’accès pour Microsoft Graph, créez une nouvelle instance de GraphServiceClient
et configurez-la de manière à inclure le jeton d’accès dans chacune des requêtes envoyées à Microsoft Graph, comme indiqué dans le code suivant :
public static GraphServiceClient GetAuthenticatedClient()
{
DelegateAuthenticationProvider provider = new DelegateAuthenticationProvider(
async (requestMessage) => {
string accessToken = await GetUserAccessTokenAsync();
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
});
GraphServiceClient graphClient = new GraphServiceClient(provider);
return graphClient;
}
Le constructeur de GraphServiceClient
attend un fournisseur d’authentification comme paramètre unique. Dans cette méthode, nous créons une instance de DelegateAuthenticationProvider
qui est configurée pour obtenir un jeton d’accès lorsqu’une nouvelle requête HTTP est envoyée. Une fois le jeton d’accès obtenu, la requête HTTP est modifiée pour inclure l’en-tête HTTP Authorization avec la valeur du jeton d’accès.
Désormais, le jeton d’accès sera ajouté à chacune des requêtes adressées à Microsoft Graph.
Expérience de l’utilisateur final
Comment se présente l’expérience pour notre utilisateur final ?
L’utilisateur est d’abord invité à se connecter, après quoi il est redirigé vers la page de connexion de Microsoft Identity. Lors de sa première connexion à l’aide de l’application web, l’application n’est pas encore autorisée à accéder à Microsoft Graph. L’application peut demander une nouvelle autorisation pour laquelle l’utilisateur n’a pas encore donné son consentement.
Dans ce cas, l’utilisateur est invité à le faire. Enfin, une fois connecté, l’utilisateur est redirigé vers l’application ASP.NET MVC qui affiche les événements de son calendrier obtenus à l’aide du kit de développement logiciel (SDK) Microsoft Graph .NET.
Présentation de l’expérience d’application
Examinons rapidement l’application.
L’utilisateur commence par indiquer qu’il souhaite se connecter à l’application web. L’application web le redirige vers la page de connexion Microsoft Identity. Une fois que l’utilisateur s’est authentifié auprès de Microsoft Identity et qu’il a donné son consentement comme décrit précédemment, il est redirigé vers l’application web ASP.NET MVC.
La redirection inclut un code d’autorisation. Le code d’autorisation est attribué à l’application web qui l’utilisera pour réclamer un jeton d’accès à Microsoft Identity. Cette requête intervient côté serveur en utilisant le client ConfidentialClient
mentionné précédemment. Une fois que l’application web dispose du jeton d’accès, elle peut appeler Microsoft Graph pour récupérer tous les éléments de calendrier de l’utilisateur à l’aide du SDK .NET.
Présentation du flux d’octroi de code d’autorisation OAuth v2
Avant de passer à l’unité suivante, penchons-nous sur le fonctionnement du flux d’octroi de code d’autorisation OAuth v2 une fois le jeton d’accès obtenu. Le diagramme ci-dessus offre une vue d’ensemble du processus avec l’application ASP.NET MVC à gauche, les deux points de terminaison Microsoft Identity v2 nécessaires à l’autorisation et à l’acquisition des jetons, et Microsoft Graph à droite.
Une fois le jeton d’accès acquis, votre application appelle Microsoft Graph sans qu’il soit nécessaire de répéter la procédure d’obtention du jeton d’accès. L’application web met localement en cache le jeton d’accès et continue à l’utiliser jusqu’à ce qu’il expire.
Dans ce cas, un jeton d’actualisation est utilisé pour obtenir un nouveau jeton d’accès sans obliger l’utilisateur à se reconnecter. Il s’agit de l’un des avantages de l’utilisation de la bibliothèque MSAL car, bien qu’il soit important de comprendre ce qui se passe, la bibliothèque MSAL gère la mise en cache du jeton et, si nécessaire, actualise le jeton pour vous.
Votre code suit un schéma simple pour acquérir un jeton de façon silencieuse. En cas d’échec, votre application guide l’utilisateur pour une acquisition interactive. L’acquisition silencieuse du jeton signifie que MSAL essaie d’abord de récupérer le jeton à partir du cache, ou en utilisant un jeton d’actualisation s’il a expiré.
Résumé
Dans cette unité, vous avez appris à personnaliser et à configurer une application web ASP.NET MVC pour demander et intégrer des données obtenues à partir de Microsoft Graph.