Microsoft Graph ApiをC#で呼んで、Microsoft OneNoteのノートブックを取得する

はじめに

業務でGraph Apiを触ることがあったので備忘録として
書き残しておきます。

C#でMicrosoft OneNoteのノートブックの情報をアプリから取得するところまでやります。

もし、APIの動きを試してみたいだけでしたら
Graph Explorerで簡単に試せます。

準備

Microsoft.Graph APIを使うのに必要なパッケージをインストールしてください。以下

・Microsoft.Graph
・Microsoft.Identity.Client
・Microsoft.Graph.Auth(プレリリース版)

コード

var clientId = "clientId";
var tenantId = "tenatId";
var clientSecret = "clientSecret";

var client = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var authProvider = new ClientCredentialProvider(client);
var getGraphServiceClient = new GraphServiceClient(authProvider);

var groupId = "groupId";

var noteBook = await graphServiceClient.Groups[groupId].Onenote.Notebooks.Request().GetAsync();

ソースはこんな感じです。ここにたどり着くまでの道のりを追記していきます。

アプリの情報を指定

var clientId = "clientId";
var tenantId = "tenatId";
var clientSecret = "clientSecret";

clientId/tenantId/clientSecret これらを取得するために
Azureでアプリの登録を行い、クライアントシークレットを作成してください。
こちらの記事が参考になると思います。
(訳あってMicrosoft Graph API調べてみた)

Microsoft Graph クライアントを作成する

var client = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var authProvider = new ClientCredentialProvider(client);
var graphServiceClient = new GraphServiceClient(authProvider);

認証プロバイダーを使用して Microsoft Graph クライアントのインスタンスを作成しています。

ノートブック取得

var groupId = "groupId";

var noteBook = await graphServiceClient.Groups[groupId].Onenote.Notebooks.Request().GetAsync();

groupIdには、今回 Microsoft teamsにアップデートされたノートブックの情報を取得したいので、teams内の”チャネルへのリンクを取得”からリンクを取得し、そのUrlの”groupId=”を引数に指定します。

これでOneNoteの情報を取得できました! と言いたいところですが
ここで私は躓きました。

AzureのAPIのアクセス許可で
Notes.Read.All Notes.ReadWrite.Allのアクセス許可を追加していたのですが
その種類がユーザーの委任になっていた為、OneNoteにアクセスできませんでした。
対応として、アプリケーションとしての権限を追加することで、アクセスが可能になりました。

終わり

Microsoft Graph触るときは、認証回りにお気を付けください。

>

株式会社ユニフェイスは製造業向けのシステムを開発している会社です。
紙運用からの脱却やIoTデバイスなどを利用した実績自動収集、リアルタイムな情報共有など製造現場の最適化をご提案しています。


株式会社ユニフェイス
製造実行システムとは?
製造実行システムIB-Mes
見える化システムIB-Skin