Autenticazione Microsoft Graph con MSAL
Introduzione all’autenticazione Graph
Microsoft Graph è un’API REST unificata per accedere ai dati attraverso i servizi Microsoft 365 come Outlook, OneDrive e Teams. Aspose.Email per .NET fornisce una funzionalità incorporata IGraphClient interfaccia che semplifica l’interazione con Microsoft Graph offrendo un’API ad alto livello e tipizzata.
Utilizzando IGraphClient, puoi autenticarti via MSAL, quindi eseguire operazioni comuni come:
-
Gestire le cartelle di posta (elencare, creare, aggiornare, copiare, eliminare)
-
Lavorare con messaggi e allegati (leggere, inviare, spostare e manipolare i contenuti)
-
Accesso e gestione di eventi di calendario, contatti, categorie, regole, attività e blocchi appunti OneNote
I seguenti esempi dimostrano come creare e configurare un GraphClient istanza con un token di accesso, seguita da scenari di utilizzo tipici.
Autentica Microsoft Graph con MSAL.NET
Per lavorare con Microsoft Graph usando Aspose.Email per .NET, devi prima autenticare la tua applicazione. Può essere fatto implementando il ITokenProvider interfaccia, che fornisce i token di accesso al IGraphClient.
Questa sezione ti guida nella configurazione di MSAL.NET per ottenere i token e inizializzare il IGraphClient per inviare richieste autenticate ai servizi Microsoft Graph.
Microsoft Authentication Library (MSAL)
Passo 1: Definisci la classe AccessParameters
Crea una classe semplice per memorizzare le credenziali Microsoft 365 e la relativa configurazione.
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";
}
Passo 2: Installa il pacchetto MSAL.NET
Aggiungi il/la Microsoft.Identity.Client Pacchetto NuGet al tuo progetto. Contiene la Microsoft Authentication Library (MSAL) utilizzata per acquisire i token di accesso.
dotnet add package Microsoft.Identity.Client
Passo 3: Implementa l’interfaccia ITokenProvider
Crea un GraphTokenProvider classe che implementa il ITokenProvider interfaccia. Questa classe utilizzerà la libreria MSAL.NET per acquisire un token di accesso.
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;
}
Passo 4: Crea un’istanza ITokenProvider
Una volta che il tuo GraphTokenProvider la classe è pronta, puoi istanziarla usando le credenziali della tua app.
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);
Passo 5: Inizializza l’IGraphClient
Usa il provider di token per creare un autenticato IGraphClient istanza. Imposta il tipo di risorsa e l’ID per iniziare a interagire con Microsoft Graph.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Il tuo IGraphClient è ora autenticato e pronto a inviare richieste a Microsoft Graph per conto della tua applicazione.
Connetti al endpoint GCC High in Microsoft Graph
Aspose.Email GraphClient supporta la connessione al endpoint Microsoft Graph GCC High impostando il EndPoint proprietà manualmente. Imposta la proprietà a https://graph.microsoft.us prima di effettuare richieste.
Il seguente esempio di codice dimostra come configurare il GraphClient per connettersi al endpoint GCC High per elencare le cartelle e recuperare i messaggi.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Autenticazione asincrona a Microsoft Graph
Usa il Aspose.Email.Clients.Graph.IGraphClientAsync interfaccia per eseguire operazioni asincrone con GraphClient. Il GraphClient.GetClientAsync(ITokenProvider, string) e GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) i metodi consentono di inizializzare client Graph asincroni. Il seguente esempio di codice dimostra come configurare un client Microsoft Graph autenticato con le credenziali dell’applicazione Azure AD affinché possa operare sulla casella di posta di un utente specifico:
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";