Microsoft Graph-autentisering med MSAL
Introduktion till Graph‑autentisering
Microsoft Graph är ett enhetligt REST‑API för åtkomst till data över Microsoft 365‑tjänster som Outlook, OneDrive och Teams. Aspose.Email för .NET tillhandahåller en inbyggd IGraphClient gränssnitt som förenklar interaktionen med Microsoft Graph genom att erbjuda ett hög‑nivå, starkt typat API.
Använder IGraphClient, kan du autentisera via MSAL och sedan utföra vanliga operationer såsom:
-
Hantera e‑postmappar (lista, skapa, uppdatera, kopiera, radera)
-
Arbeta med meddelanden och bilagor (läsa, skicka, flytta och manipulera innehåll)
-
Åtkomst till och hantering av kalenderevent, kontakter, kategorier, regler, uppgifter och OneNote‑anteckningsböcker
Följande exempel visar hur du skapar och konfigurerar en GraphClient instans med en åtkomst‑token, följt av typiska användningsscenarier.
Autentisera Microsoft Graph med MSAL.NET
För att arbeta med Microsoft Graph med Aspose.Email för .NET måste du först autentisera din applikation. Det kan göras genom att implementera ITokenProvider gränssnitt, som levererar åtkomst‑token till IGraphClient.
Detta avsnitt guidar dig genom att konfigurera MSAL.NET för att erhålla token och initiera IGraphClient för att skicka autentiserade förfrågningar till Microsoft Graph‑tjänster.
Microsoft Authentication Library (MSAL)
Steg 1: Definiera AccessParameters‑klassen
Skapa en enkel klass för att lagra dina Microsoft 365‑uppgifter och relaterad konfiguration.
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";
}
Steg 2: Installera MSAL.NET‑paketet
Lägg till Microsoft.Identity.Client NuGet‑paket till ditt projekt. Det innehåller Microsoft Authentication Library (MSAL) som används för att erhålla åtkomst‑token.
dotnet add package Microsoft.Identity.Client
Steg 3: Implementera ITokenProvider‑gränssnittet
Skapa en GraphTokenProvider klass som implementerar ITokenProvider gränssnitt. Denna klass kommer att använda MSAL.NET‑biblioteket för att erhålla en access‑token.
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;
}
Steg 4: Skapa en ITokenProvider‑instans
När du har din GraphTokenProvider klass är klar, du kan skapa en instans med dina app‑uppgifter.
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);
Steg 5: Initiera IGraphClient
Använd token‑providern för att skapa en autentiserad IGraphClient instans. Ställ in resursens typ och ID för att börja interagera med Microsoft Graph.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Din IGraphClient är nu autentiserad och klar att skicka förfrågningar till Microsoft Graph på uppdrag av din applikation.
Anslut till GCC High‑endpoint i Microsoft Graph
Aspose.Email GraphClient stöder anslutning till Microsoft Graph GCC High‑endpoint genom att sätta EndPoint egenskap manuellt. Ställ in egenskapen till https://graph.microsoft.us innan du gör förfrågningar.
Följande kodexempel visar hur du konfigurerar GraphClient för att ansluta till GCC High‑endpointen för att lista mappar och hämta meddelanden.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Asynkron autentisering till Microsoft Graph
Använd Aspose.Email.Clients.Graph.IGraphClientAsync gränssnitt för att utföra asynkrona operationer med GraphClient. Klassen GraphClient.GetClientAsync(ITokenProvider, string) och GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) metoder låter dig initiera asynkrona Graph‑klienter. Följande kodexempel visar hur du konfigurerar en autentiserad Microsoft Graph‑klient med Azure AD‑applikationsuppgifter så att den kan arbeta med en specifik användares brevlåda:
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";