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 非同期操作を実行するためのインターフェイス GraphClient。 GraphClient.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";