Microsoft Graph API + PostmanでOneDriveにファイルアップロード

サーバーのバックグラウンド処理(PHP)でOneDriveの機能を利用する方法を調査しているときの覚書。

環境: CentOS Stream 8, PHP 7.4.19

Microsoft Graph API公式ドキュメント

サーバーなどバックグラウンドでMicrosoft Graph APIにアクセスするのを「アプリケーション(Application)」と呼んでいる。
ユーザーの許可を得るアクセスは「委任(Delegated)」。

最初はよく分からなくてもPostmanで動作確認するあたりでだんだんと分かってくる。


1.アプリ登録とアクセス許可

まずは上記公式ドキュメントに従ってやってみる。

  1. アプリ登録
  2. 「証明書とシークレット」からクライアントシークレットを作成
    説明は作成日(20220804)を設定することにした
    値をコピーしておく
  3. 「APIのアクセス許可」からアクセス許可の追加。
    Files.ReadWrite.All|アプリケーションを追加
    「既定のディレクトリに管理者の同意を与えます」をクリック


ちなみに無期限のクライアントシークレットは作成不可になったらしい。
クライアントシークレットを定期更新する処理を作るか、手動による更新が必要。


2.Postmanで動作確認

10年前によく使っていたAPIテストツール「Postman」がクラウドベースで超進化していた。

上記ドキュメントからリンクされている説明動画を見ればだいたい分かる。
Googleアカウントでサインアップした。

動画と同じことをやってみる。
Postmanの画面が少し違っていた。
動画見て分かった気にならないのが大事。


3.OneDriveの情報取得

Postman上で特定ユーザーのOneDrive情報を取得するリクエストを送信してみる。
UserIdはGet Usersしたら変数として自動登録されていた。

GET:: https://graph.microsoft.com/v1.0/users/{{UserId}}/drive

下記エラー

Tenant does not have a SPO license.

下記によるとTenantIDの組織でOffice365 Businessの契約が必要らしい。


4.Microsoft 365 Business Basicを契約

月額650円のMicrosoft 365 Business Basic 試用版を契約してみた。

Azureポータルを試すときに作成したときと同じメールアドレスを使ったにもかかわらず、新しいMicrosoftアカウントが作成された。

Azureポータルも新しいMicrosoft 365 Businessのアカウントで管理するため前のは削除する。



5.OneDriveにファイルアップロード

Azureポータルでアプリ登録からやり直し。
Postmanの変数をセットし直し。
Get UsersしてUserIDをセットしたあとOneDrive情報を取得。

GET:: https://graph.microsoft.com/v1.0/users/{{UserId}}/drive

無事情報が取得できた。
(1ヵ月試用版でも問題なかった)

rootディレクトリの一覧取得
GET:: https://graph.microsoft.com/v1.0/users/{{UserId}}/drive/root/children/

ファイルをアップロードしてみる。

PUT:: https://graph.microsoft.com/v1.0/drives/{{DriveID}}/items/root:/{{FileName}}:/content

DriveIDはGet Driveしたときのid。
(Postmanの変数で管理)

OneDriveにファイルがアップロードされたことを確認。


目途が立った。
次はPHPで実装する。


【関連記事】