4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MSAL(Microsoft Authentication Library)について

Last updated at Posted at 2023-03-23

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(二重認証)を解除する必要がある

参考サイト

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?