uniface.hub

  • 2021年7月19日
  • hozumi
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触るときは、認証回りにお気を付けください。