MSAL を使用した Microsoft Graph 認証

Graph 認証の概要

Microsoft Graph は、Microsoft 365 の Outlook、OneDrive、Teams などのサービス全体のデータにアクセスするための統合 REST API です。Aspose.Email for .NET は組み込みの IGraphClient 高レベルで強く型付けされた API を提供し、Microsoft Graph とのやり取りをシンプルにするインターフェイス。

使用する IGraphClient、MSAL による認証後、次のような一般的な操作を実行できます:

  • メール フォルダーの管理(一覧、作成、更新、コピー、削除)

  • メッセージと添付ファイルの操作(読み取り、送信、移動、内容の操作)

  • カレンダー イベント、連絡先、カテゴリ、ルール、タスク、OneNote ノートブックへのアクセスと管理

以下の例は、作成と構成の方法を示しています GraphClient インスタンスにアクセストークンを設定し、一般的な使用シナリオに続きます。

MSAL.NET を使用した Microsoft Graph の認証

Aspose.Email for .NET で Microsoft Graph を利用するには、まずアプリケーションを認証する必要があります。これは、次の実装により行えます ITokenProvider インターフェイスは、アクセストークンを IGraphClient.

このセクションでは、トークン取得のための MSAL.NET のセットアップと、以下の初期化手順を案内します IGraphClient Microsoft Graph サービスへ認証済みリクエストを送信するために使用します。

Microsoft Authentication Library(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 へリクエストを送信できるようになりました。

Microsoft Graph で GCC High エンドポイントに接続

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 非同期操作を実行するためのインターフェイス GraphClientGraphClient.GetClientAsync(ITokenProvider, string) および GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) 非同期 Graph クライアントを初期化するメソッドです。以下のコード例は、Azure AD アプリケーション認証情報を使用して認証済み Microsoft Graph クライアントを設定し、特定ユーザーのメールボックスで操作できるようにする方法を示しています。

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