MSAL(Microsoft Authentication Library)とは
2019年に公開され(?)、Microsoft Graph API認証用のライブラリです。
ASDL(Azure Active Directory 認証ライブラリ)のサポートは 2023 年 6 月に終了するため、
今からGraphAPIの開発はMSALの使用をお勧めします。
認証種類
・トークン
・Authorization code (承認コード)
・クライアントの資格情報(クライアントシークレットOR 証明書)
・デバイス コード
・Implicit grant (暗黙的な付与)
・On-behalf-of (OBO)
・ユーザー名/パスワード (ROPC)→推奨ではない
・統合 Windows 認証 (IWA)
ネットで調べた結果、クライアントシークレットの認証がよく使われている。
ユーザー名/パスワードの認証は、推奨されていない。
使い方
①Azure Active Directoryアプリ登録
https://learn.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-register-app
②GraphAPIのアクセス許可を追加、テナント管理者を同意する
https://learn.microsoft.com/ja-jp/graph/security-authorization
③認証方式を確認する(クライアントシークレット ORユーザー名/パスワード)
④MSAL.NET を使用してクライアント アプリケーションを初期化する
https://learn.microsoft.com/ja-jp/azure/active-directory/develop/msal-net-initializing-client-applications
https://qiita.com/songoku/items/7d35f55e7d574d8ca112
⑤クライアントシークレットで認証して、GraphAPIを呼び出す
// user.read,file.read なども可能
var scopes = new string[] { "https://graph.microsoft.com/.default" };
var tenantId = テナントID;
// Configure the MSAL client as a confidential client
var confidentialClient = ConfidentialClientApplicationBuilder
.Create(クライアントID)
.WithAuthority($"https://login.microsoftonline.com/{テナントID}/v2.0")
.WithClientSecret(クライアントシークレット)
.Build();
// Retrieve an access token for Microsoft Graph
var authResult = await confidentialClient
.AcquireTokenForClient(scopes)
.ExecuteAsync();
//認証
var authProvider = new DelegateAuthenticationProvider(request =>
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
return Task.CompletedTask;
});
var graphClient = new GraphServiceClient(authProvider);
委任されたアクセス許可とアプリケーションのアクセス許可
Azure Active DirectoryでGraph APIを選択するとき、下記の選択肢が出てきます。
・「委任されたアクセス許可」: 指定したユーザーの権限でAPIを使用する(ユーザで操作する)
・「アプリケーションのアクセス許可」 :AzureADアプリに設定した権限でAPIを使用する(ユーザなし、アプリケーションで操作する)
注意点
① ユーザ/パスワードで認証する場合、ユーザーのMFA(二重認証)を解除する必要がある
参考サイト