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#)