Authentification Microsoft Graph avec MSAL
Introduction à l’authentification Graph
Microsoft Graph est une API REST unifiée pour accéder aux données à travers les services Microsoft 365 tels qu’Outlook, OneDrive et Teams. Aspose.Email pour .NET fournit un IGraphClient interface qui simplifie l’interaction avec Microsoft Graph en offrant une API haut niveau, fortement typée.
Utilisation de IGraphClient, vous pouvez vous authentifier via MSAL, puis effectuer des opérations courantes telles que :
-
Gérer les dossiers de messagerie (lister, créer, mettre à jour, copier, supprimer)
-
Travailler avec les messages et les pièces jointes (lecture, envoi, déplacement et manipulation du contenu)
-
Accéder et gérer les événements de calendrier, les contacts, les catégories, les règles, les tâches et les carnets OneNote
Les exemples suivants montrent comment créer et configurer un(e) GraphClient instance avec un jeton d’accès, suivi des scénarios d’utilisation typiques.
Authentifier Microsoft Graph avec MSAL.NET
Pour travailler avec Microsoft Graph en utilisant Aspose.Email pour .NET, vous devez d’abord authentifier votre application. Cela peut être fait en implémentant le ITokenProvider interface, qui fournit des jetons d’accès au IGraphClient.
Cette section vous guide dans la configuration de MSAL.NET pour obtenir des jetons et initialiser le IGraphClient pour envoyer des requêtes authentifiées aux services Microsoft Graph.
Bibliothèque d’authentification Microsoft (MSAL)
Étape 1 : Définir la classe AccessParameters
Créez une classe simple pour stocker vos identifiants Microsoft 365 et la configuration associée.
public class AccessParameters
{
public string TenantId { get; init; }
public string ClientId { get; init; }
public string ClientSecret { get; init; }
public string UserId { get; init; }
public Uri Authority => new ($"https://login.microsoftonline.com/{TenantId}");
public string ApiUrl => "https://graph.microsoft.com/.default";
}
Étape 2 : Installer le package MSAL.NET
Ajouter le Microsoft.Identity.Client Paquet NuGet à votre projet. Il contient la Microsoft Authentication Library (MSAL) utilisée pour obtenir des jetons d’accès.
dotnet add package Microsoft.Identity.Client
Étape 3 : Implémenter l’interface ITokenProvider
Créez un GraphTokenProvider classe qui implémente le ITokenProvider interface. Cette classe utilisera la bibliothèque MSAL.NET pour acquérir un jeton d’accès.
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;
using Aspose.Email.Clients;
public class GraphTokenProvider : ITokenProvider
{
private readonly IConfidentialClientApplication _app;
private readonly string[] _scopes;
private string? _token;
public GraphTokenProvider(AccessParameters accessParams)
{
_app = ConfidentialClientApplicationBuilder.Create(accessParams.ClientId)
.WithClientSecret(accessParams.ClientSecret)
.WithAuthority(accessParams.Authority)
.Build();
_app.AddInMemoryTokenCache();
_scopes = new[] { accessParams.ApiUrl };
}
public void Dispose()
{
throw new NotImplementedException();
}
public OAuthToken GetAccessToken()
{
return GetAccessToken(false);
}
public OAuthToken GetAccessToken(bool ignoreExistingToken)
{
if (!ignoreExistingToken && _token != null)
{
return new OAuthToken(_token);
}
_token = GetAccessTokenAsync().GetAwaiter().GetResult();
return new OAuthToken(_token);
}
private async Task<string?> GetAccessTokenAsync()
{
AuthenticationResult? result;
try
{
result = await _app.AcquireTokenForClient(_scopes)
.ExecuteAsync();
Console.WriteLine("Token acquired");
}
catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
{
Console.WriteLine("Scope provided is not supported");
result = null;
}
if (result == null) return null;
_token = result.AccessToken;
return result.AccessToken;
}
Étape 4 : Créer une instance ITokenProvider
Une fois votre GraphTokenProvider classe est prête, vous pouvez l’instancier en utilisant les informations d’identification de votre application.
var accessParams = new AccessParameters()
{
TenantId = "Your Tenant ID",
ClientId = "Your Client ID",
ClientSecret = "Your Client Secret",
UserId = "User's Object ID"
};
var tokenProvider = new GraphTokenProvider(accessParams);
Étape 5 : Initialiser le IGraphClient
Utilisez le fournisseur de jeton pour créer un objet authentifié IGraphClient instance. Définissez le type de ressource et l’ID pour commencer à interagir avec Microsoft Graph.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Votre IGraphClient est maintenant authentifié et prêt à envoyer des requêtes à Microsoft Graph au nom de votre application.
Se connecter au point de terminaison GCC High dans Microsoft Graph
Aspose.Email GraphClient prend en charge la connexion au point de terminaison Microsoft Graph GCC High en définissant le EndPoint propriété manuellement. Définissez la propriété à https://graph.microsoft.us avant d’effectuer les requêtes.
L’exemple de code suivant montre comment configurer le GraphClient pour se connecter au point de terminaison GCC High afin de lister les dossiers et récupérer les messages.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Authentification asynchrone à Microsoft Graph
Utilisez le Aspose.Email.Clients.Graph.IGraphClientAsync interface pour effectuer des opérations asynchrones avec GraphClient. Le GraphClient.GetClientAsync(ITokenProvider, string) et GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) Les méthodes vous permettent d’initialiser des clients Graph asynchrones. L’exemple de code suivant montre comment configurer un client Microsoft Graph authentifié avec les informations d’identification d’une application Azure AD afin qu’il puisse fonctionner sur la boîte aux lettres d’un utilisateur spécifique :
var accessParameters = Settings.User1;
var provider = new AzureConfidentialTokenProvider(
accessParameters.TenantId,
accessParameters.ClientId,
accessParameters.ClientSecret);
var client = GraphClient.GetClientAsync(provider, accessParameters.TenantId);
client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";