احراز هویت 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 به پروژه شما. شامل کتابخانه احراز هویت مایکروسافت (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 نمونه. نوع منبع و شناسه را تنظیم کنید تا با 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 از اتصال به نقطه انتهایی GCC High Microsoft Graph با تنظیم 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";