Microsoft Graph API + PostmanでOneDriveにファイルアップロード
サーバーのバックグラウンド処理(PHP)でOneDriveの機能を利用する方法を調査しているときの覚書。
環境: CentOS Stream 8, PHP 7.4.19
Microsoft Graph API公式ドキュメント
サーバーなどバックグラウンドでMicrosoft Graph APIにアクセスするのを「アプリケーション(Application)」と呼んでいる。
ユーザーの許可を得るアクセスは「委任(Delegated)」。
最初はよく分からなくてもPostmanで動作確認するあたりでだんだんと分かってくる。
1.アプリ登録とアクセス許可
まずは上記公式ドキュメントに従ってやってみる。
- アプリ登録
- 「証明書とシークレット」からクライアントシークレットを作成
説明は作成日(20220804)を設定することにした
値をコピーしておく - 「APIのアクセス許可」からアクセス許可の追加。
Files.ReadWrite.All|アプリケーションを追加
「既定のディレクトリに管理者の同意を与えます」をクリック
ちなみに無期限のクライアントシークレットは作成不可になったらしい。
クライアントシークレットを定期更新する処理を作るか、手動による更新が必要。
2.Postmanで動作確認
10年前によく使っていたAPIテストツール「Postman」がクラウドベースで超進化していた。
- Microsoft Graph API で Postman を使用する - Microsoft Graph | Microsoft Docs
- Microsoft Graph | Postman API Network
上記ドキュメントからリンクされている説明動画を見ればだいたい分かる。
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で実装する。