0
0

Microsoft Graph API を Graph Client Service を利用せずに GET PUT POST を実行する(C#)~認証の取得編~

Last updated at Posted at 2024-08-07

1. はじめに

Microsoft Graph API は、MSの公式ドキュメントを読むと、ほとんど Graph Client Service を使ってAPIを実行しています。
しかし、私はある事情でGraph Client Service を利用できませんでした。
従って、HttpClient を使用してAPIを実行したので、この方法についてご紹介します。
なお、デスクトップアプリ開発を想定しており、言語はC#です。

2. 認証の取得の実装

apiの実行について、今回は GET PUT POST の3つのリクエストを紹介しますが、そのどれにも必要なのが認証トークンの取得です。
ということで認証トークンの取得から説明していきます。

ただ、認証の取得といっても様々な認証の取得方法があります。
今回は対話型の認証方法を実施します。
※認証の種類についてはこちらを参照ください。

2.1. アプリケーションの生成

認証には以下の情報が必要です。

  • アプリケーションId
  • テナントId
  • 認証スコープ
  • 認証インスタンス

ただこれらの情報の取得には、Azureのアプリの登録が必要になりますので、Azureの登録方法について知りたい方は、こちらの記事をご覧ください。

今回は認証を行うサービスクラスを実装します。
まずはコンストラクタでアプリケーションの生成をします。

// 認証のサービスクラス
public AuthenticationService(string applicationId, string tenantId)
{
    // アプリケーションの生成
    var builder = PublicClientApplicationBuilder.Create(applicationId)
        .WithAuthority($"{c_Instance}{tenantId}")
        .WithDefaultRedirectUri();
    m_App = builder.Build();

    // キャッシュの有効化
    TokenCacheHelper.EnableSerialization(m_App.UserTokenCache);
}

ここで、キャッシュの有効化を TokenCacheHelper でしています。
今回は対話型のフローを使用しているため、キャッシュの有効化をしておけば、何度も認証を実施する必要がなくなります。

2.2. 認証トークンの取得

では実際に認証トークンを取得します。

// 認証の取得
public async Task<AuthenticationResult> AcquireTokenAsync()
{
    var accounts = await m_App.GetAccountsAsync();
    var firstAccount = accounts.FirstOrDefault();

    // 認証トークンの取得
    // サイレント認証を試行し、失敗した場合にインタラクティブ認証を試行する
    AuthenticationResult? authResult = null;
    try
    {
        authResult = await m_App.AcquireTokenSilent(c_Scopes, firstAccount)
            .ExecuteAsync();
    }
    catch
    {
        try
        {
            authResult = await m_App.AcquireTokenInteractive(c_Scopes)
                .WithAccount(firstAccount)
                .WithPrompt(Prompt.SelectAccount)
                .ExecuteAsync();
        }
        catch
        {
            // 失敗
        }
    }

    return authResult;
}

今回の例では、キャッシュを有効化しているため、はじめにサイレント認証、つまりキャッシュを用いて認証を取得します。
キャッシュがなかった場合に、対話型の認証を実施します。

上記のメソッドで認証を取得することができました。
ただGET PUT POSTには認証トークンが必要になります。
従って、先ほど取得した認証から認証トークンを取得します。

var token = authResult.AccessToken;

これで完了です。

終わり

これで認証トークン取得は完了です。
後はこれを用いて、GET PUT POSTを実行します。

この続きは以下の記事をご覧ください
Microsoft Graph API を Graph Client Service を利用せずに GET PUT POST をHTTPで実行する(C#)

0
0
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
0
0