Microsoft Graph-Authentifizierung mit MSAL

Einführung in die Graph-Authentifizierung

Microsoft Graph ist eine einheitliche REST-API zum Zugriff auf Daten aus Microsoft‑365-Diensten wie Outlook, OneDrive und Teams. Aspose.Email für .NET bietet eine integrierte IGraphClient Schnittstelle, die die Interaktion mit Microsoft Graph vereinfacht, indem sie eine hochgradig typisierte API bereitstellt.

Verwendung von IGraphClient, können Sie sich über MSAL authentifizieren und dann übliche Vorgänge wie folgende ausführen:

  • Verwalten von Mailordnern (auflisten, erstellen, aktualisieren, kopieren, löschen)

  • Arbeiten mit Nachrichten und Anhängen (lesen, senden, verschieben und Inhalt manipulieren)

  • Zugriff auf und Verwaltung von Kalenderereignissen, Kontakten, Kategorien, Regeln, Aufgaben und OneNote-Notizbüchern

Die folgenden Beispiele zeigen, wie man ein GraphClient Instanz mit einem Zugriffstoken, gefolgt von typischen Anwendungsfällen.

Microsoft Graph mit MSAL.NET authentifizieren

Um mit Microsoft Graph unter Verwendung von Aspose.Email für .NET zu arbeiten, müssen Sie zunächst Ihre Anwendung authentifizieren. Dies kann durch Implementierung der ITokenProvider Schnittstelle, die Zugriffstoken für die IGraphClient.

Dieser Abschnitt führt Sie durch die Einrichtung von MSAL.NET zum Abrufen von Tokens und die Initialisierung des IGraphClient um authentifizierte Anfragen an Microsoft Graph-Dienste zu senden.

Microsoft Authentication Library (MSAL)

Schritt 1: Definieren der AccessParameters‑Klasse

Erstellen Sie eine einfache Klasse, um Ihre Microsoft‑365-Anmeldedaten und zugehörige Konfiguration zu speichern.

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";
}

Schritt 2: Installieren des MSAL.NET-Pakets

Fügen Sie das Microsoft.Identity.Client NuGet-Paket zu Ihrem Projekt hinzufügen. Es enthält die Microsoft Authentication Library (MSAL), die zum Erhalten von Zugriffstoken verwendet wird.

dotnet add package Microsoft.Identity.Client

Schritt 3: Implementieren der ITokenProvider-Schnittstelle

Erstellen Sie ein GraphTokenProvider Klasse, die das implementiert ITokenProvider Schnittstelle. Diese Klasse verwendet die MSAL.NET-Bibliothek, um ein Zugriffstoken zu erhalten.

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;
    }

Schritt 4: Erstellen einer ITokenProvider-Instanz

Sobald Ihre GraphTokenProvider Klasse ist bereit, Sie können sie mit Ihren App-Anmeldedaten instanziieren.

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);

Schritt 5: Initialisierung des IGraphClient

Verwenden Sie den Token-Provider, um ein authentifiziertes IGraphClient Instanz. Legen Sie den Ressourcentyp und die ID fest, um mit Microsoft Graph zu interagieren.

using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);

client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;

Ihr IGraphClient ist nun authentifiziert und bereit, im Auftrag Ihrer Anwendung Anfragen an Microsoft Graph zu senden.

Verbindung zum GCC High-Endpunkt in Microsoft Graph

Aspose.Email GraphClient unterstützt die Verbindung zum Microsoft Graph GCC High-Endpunkt durch Setzen des EndPoint Eigenschaft manuell. Setzen Sie die Eigenschaft auf https://graph.microsoft.us vor dem Senden von Anfragen.

Das folgende Codebeispiel zeigt, wie die GraphClient um eine Verbindung zum GCC High-Endpunkt herzustellen, um Ordner aufzulisten und Nachrichten abzurufen.

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 Authentifizierung bei Microsoft Graph

Verwenden Sie die Aspose.Email.Clients.Graph.IGraphClientAsync Schnittstelle zur Ausführung asynchroner Vorgänge mit GraphClient. Die GraphClient.GetClientAsync(ITokenProvider, string) und GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) Methoden ermöglichen das Initialisieren asynchroner Graph-Clients. Das folgende Codebeispiel zeigt, wie ein authentifizierter Microsoft Graph-Client mit Azure AD-Anmeldeinformationen konfiguriert wird, sodass er auf das Postfach eines bestimmten Benutzers zugreifen kann:

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";