Microsoft Graph-authenticatie met MSAL
Introductie tot Graph-authenticatie
Microsoft Graph is een uniforme REST‑API voor het benaderen van data over Microsoft 365‑diensten zoals Outlook, OneDrive en Teams. Aspose.Email for .NET biedt een ingebouwde IGraphClient interface die interactie met Microsoft Graph vereenvoudigt door een hoog niveau, sterk getypeerde API te bieden.
Gebruik van IGraphClient, je kunt authenticeren via MSAL, en vervolgens veelvoorkomende handelingen uitvoeren zoals:
-
Beheren van e‑mailmappen (lijst, aanmaken, bijwerken, kopiëren, verwijderen)
-
Werken met berichten en bijlagen (lezen, verzenden, verplaatsen en inhoud manipuleren)
-
Toegang tot en beheer van agenda‑evenementen, contacten, categorieën, regels, taken en OneNote‑notitieblokken
De volgende voorbeelden tonen hoe je een GraphClient instantie met een toegangstoken, gevolgd door typische gebruiksscenario’s.
Authenticeer Microsoft Graph met MSAL.NET
Om met Microsoft Graph te werken via Aspose.Email for .NET, moet je eerst je applicatie authenticeren. Dit kan door de ITokenProvider interface, die toegangstokens levert aan de IGraphClient.
Deze sectie leidt je door het configureren van MSAL.NET om tokens te verkrijgen en het initialiseren van de IGraphClient om geauthenticeerde verzoeken te sturen naar Microsoft Graph-services.
Microsoft Authentication Library (MSAL)
Stap 1: Definieer de AccessParameters-klasse
Maak een eenvoudige klasse om je Microsoft 365-referenties en gerelateerde configuratie op te slaan.
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";
}
Stap 2: Installeer het MSAL.NET-pakket
Voeg de toe Microsoft.Identity.Client NuGet-pakket aan je project toevoegen. Het bevat de Microsoft Authentication Library (MSAL) die wordt gebruikt om toegangstokens te verkrijgen.
dotnet add package Microsoft.Identity.Client
Stap 3: Implementeer de ITokenProvider-interface
Maak een GraphTokenProvider klasse die de ITokenProvider interface. Deze klasse zal de MSAL.NET-bibliotheek gebruiken om een toegangstoken te verkrijgen.
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;
}
Stap 4: Maak een ITokenProvider-instantie
Zodra je GraphTokenProvider klasse is klaar, je kunt deze instantiëren met je app-referenties.
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);
Stap 5: Initialiseer de IGraphClient
Gebruik de tokenprovider om een geauthenticeerde IGraphClient instantie. Stel het resource-type en de ID in om te beginnen met interactie met Microsoft Graph.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Je IGraphClient is nu geauthenticeerd en klaar om verzoeken naar Microsoft Graph te sturen namens je applicatie.
Verbinden met GCC High-eindpunt in Microsoft Graph
Aspose.Email GraphClient ondersteunt verbinding met het Microsoft Graph GCC High-eindpunt door de EndPoint eigenschap handmatig. Stel de eigenschap in op https://graph.microsoft.us voor het doen van verzoeken.
Het volgende codevoorbeeld toont hoe je de GraphClient om verbinding te maken met het GCC High-eindpunt voor het lijsten van mappen en ophalen van berichten.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Asynchrone authenticatie voor Microsoft Graph
Gebruik de Aspose.Email.Clients.Graph.IGraphClientAsync interface om asynchrone bewerkingen uit te voeren met GraphClient. De GraphClient.GetClientAsync(ITokenProvider, string) en GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) methoden stellen je in staat om asynchrone Graph-clients te initialiseren. Het volgende codevoorbeeld toont hoe je een geauthenticeerde Microsoft Graph-client configureert met Azure AD-toepassingsreferenties zodat deze kan werken met de postbus van een specifieke gebruiker:
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";