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