אימות Microsoft Graph עם MSAL

מבוא לאימות Graph

Microsoft Graph הוא API REST מאוחד לגישה לנתונים בשירותי Microsoft 365 כגון Outlook, OneDrive ו-Teams. Aspose.Email ל‑.NET מספק מובנה IGraphClient ממשק שמפשט את האינטראקציה עם Microsoft Graph על‑ידי הצעת API ברמת גבוה ובסוגיות חזקות.

שימוש ב‑ IGraphClient, ניתן לאמת באמצעות MSAL, ולאחר מכן לבצע פעולות נפוצות כגון:

  • ניהול תיקיות דואר (רשימה, יצירה, עדכון, העתקה, מחיקה)

  • עבודה עם הודעות וקבצים מצורפים (קריאה, שליחה, העברה ושינוי תוכן)

  • גישה וניהול אירועי לוח שנה, אנשי קשר, קטגוריות, חוקים, משימות ופנקסי OneNote

הדוגמאות הבאות מציגות כיצד ליצור ולהגדיר GraphClient מופע עם טוקן גישה, ולאחר מכן תרחישי שימוש טיפוסיים.

אימות Microsoft Graph עם MSAL.NET

כדי לעבוד עם Microsoft Graph באמצעות Aspose.Email ל‑.NET, עליך תחילה לאמת את האפליקציה שלך. ניתן לבצע זאת על‑ידי מימוש ה‑ ITokenProvider ממשק, המספק טוקני גישה ל‑ IGraphClient.

סעיף זה מנחה אותך דרך הגדרת MSAL.NET לקבלת טוקנים ואתחול ה‑ IGraphClient לשליחת בקשות מאומתות לשירותי Microsoft Graph.

ספריית האימות של מיקרוסופט (MSAL)

צעד 1: הגדרת מחלקת AccessParameters

צור מחלקה פשוטה לאחסון אישורי Microsoft 365 והקונפיגורציה הרלוונטית.

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

צעד 2: התקנת חבילה MSAL.NET

הוסף את ה- Microsoft.Identity.Client חבילת NuGet לפרויקט שלך. היא כוללת את Microsoft Authentication Library (MSAL) המשמשת להשגת טוקני גישה.

dotnet add package Microsoft.Identity.Client

צעד 3: מימוד הממשק ITokenProvider

צור GraphTokenProvider מחלקה שמיישמת את ITokenProvider ממשק. מחלקה זו תשתמש בספריית MSAL.NET כדי לקבל אסימון גישה.

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

צעד 4: יצירת מופע ITokenProvider

לאחר ה‑ GraphTokenProvider המחלקה מוכנה, ניתן ליצור מופע שלה באמצעות אישורי האפליקציה שלך.

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

צעד 5: אתחול ה-IGraphClient

השתמש בספק הטוקן ליצירת IGraphClient מופע. הגדר את סוג המשאב וה‑ID כדי להתחיל לתקשר עם Microsoft Graph.

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

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

ה-IGraphClient שלך מאומת כעת ומוכן לשלוח בקשות ל-Microsoft Graph בשם האפליקציה שלך.

התחברות לנקודת הקצה GCC High ב-Microsoft Graph

Aspose.Email GraphClient תומך בחיבור לנקודת הקצה Microsoft Graph GCC High על ידי הגדרת ה‑ EndPoint מאפיין ידנית. הגדר את המאפיין ל‑ https://graph.microsoft.us לפני ביצוע בקשות.

דוגמת הקוד הבאה מדגימה כיצד להגדיר את GraphClient להתחבר לנקודת הקצה GCC High לצורך רשימת תיקיות וקבלת הודעות.

client.EndPoint = "https://graph.microsoft.us";

var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);

אימות אסינכרוני ל-Microsoft Graph

השתמש ב- Aspose.Email.Clients.Graph.IGraphClientAsync ממשק לביצוע פעולות אסינכרוניות עם GraphClient. ה GraphClient.GetClientAsync(ITokenProvider, string) ו GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) שיטות מאפשרות לך לאתחל לקוחות Graph אסינכרוניים. דוגמת הקוד הבאה מדגימה כיצד להגדיר לקוח Microsoft Graph מאומת עם אישורי אפליקציית Azure AD כך שהוא יכול לפעול על תיבת הדואר של משתמש ספציפי:

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