Quantcast
Channel: Postmanタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 470

Microsoft Graph REST APIで、OneDrive内にあるはずのファイルにアクセスできなくて困った話

$
0
0
訳あってMicrosoft Graphについていろいろ調べてます。 最終的なゴールは、「Microsoft Graph API経由で、OneDrive上にあるエクセルファイルのセルを更新し、計算結果を取得したい」です。 今回は、そもそもMicrosoft GraphのAPIでエクセルファイルにアクセスできなくて苦労した話。 まずはチュートリアル Microsoft Graphを使うのは初めてなので、この辺のチュートリアルで基本を学習。 後々の実装を考慮してPostmanを使うチュートリアルを選びました。 チュートリアルの内容はざっくり Microsoft GraphのPostmanコレクションを、Postmanのローカルワークスペースに落とす Azure AD Portalで、新規のアプリを登録する Azure AD Portalで、APIのアクセス許可を設定 Postman内で、認証情報を環境変数に登録 Postmanで、認証を要求してトークンをゲット Postmanで、ユーザープロフィールやメールの情報を取得するリクエストを実行 といった感じでした。 チュートリアルでハマったポイント Microsoft Graph APIには、Microsoftユーザーの委任が必要な機能と、ユーザー委任が要らない機能があります。 委任が必要な機能はDelegated配下にあり、委任が要らない機能はApplication配下に入っているようです。 利用価値が高い機能は、だいたいDelegatedの方に入っている印象です。 Delegatedの機能を使おうとして、ブチ当たった権限関係の壁が以下。 試行① 個人アカウントではダメだった 最初は自分の個人Microsoftアカウントを使おうとしてましたが Azure ADにアプリを登録するところまではOK でもPostman側で認証が通らずトークンがゲットできなかった です。 試行② 使いたいAPIによっては管理者権限がないとダメ では、と会社のADアカウントでテストしようとしたらトークンはゲットできたが・・・ Azure AD Portal内でAPIのアクセスを許可する際、APIによっては管理者の承認が必要です。 今回のチュートリアルで使うUser.Read.AllへのAPIアクセスを許可するには管理者承認が必要。 だが、私のADユーザーは管理者権限がないので、上図のGrant admin consent for xxxがグレーになっていてクリックできなかった。 ので、しょうがないからビジネスアカウントを開設しました。。 ($5.00/ユーザ/月で、1ヶ月の無料トライアルあり) ビジネスアカウントで全部の設定をやり直したら無事にチュートリアルの例をクリアできました。 いよいよエクセルのファイルにアクセス 要領が掴めた気がしたので、次の課題はこれ。 Excel のブックとグラフの API の概要: https://docs.microsoft.com/ja-jp/graph/excel-concept-overview API越しでエクセルファイルにアクセスしたいので、OneDriveのルートディレクトリにtestfile.xlsxというファイルをアップロードしました。 OneDriveにアップしたはずのファイルが見つからない問題 Microsoft Graph REST API v1.0のリファレンスによれば、ワークブックにアクセスするにはDrive APIを使うそうです https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/ が、ファイルのIDがわからないので、とりあえずOneDrive内のファイルリストを取得してみよう GET https://graph.microsoft.com/v1.0/me/drive/root/children ・・・ { "error": { "code": "itemNotFound", "message": "Item not found", "innerError": { "date": "2021-09-02T08:56:26", "request-id": "08062f98-ab36-46d8-b6ee-3c5e6eeb0904", "client-request-id": "ebae23aa-f7c1-655d-08c9-355f218a0bb0" } } } ・・・Item not found だと?! ファイルがちゃんとアップロードされてなかったんじゃないかとか、API URLのパス指定が違うんじゃないかとか、いろいろ疑った末、最終的に答えをくれたのはこちらのページ: https://stackoverflow.com/questions/57991060/cannot-access-me-drive-root-children-nor-any-driveitem-object 問題は、DelegatedのAuthorization設定で、Scopeがデフォルト値のままになっていたことでした。 デフォルト値のhttps://graph.microsoft.com/.defaultを、今回使うAPIに設定した権限:files.readwrite.allに変更したら問題が解決しました! 無事にOneDrive内のファイルリストがゲットできるようになったところで本日は終了。 次はエクセルファイル内のセルの値の更新をテストする予定。

Viewing all articles
Browse latest Browse all 470

Trending Articles