💻

SharePoint Online の REST API を対話なしで実行する

2022/01/01に公開

はじめに

SharePoint 2013 では REST API が使用できます。しかし Microsoft Docs を見るとプロバイダー ホスト型 SharePoint アドインから OAuth で使用する場合を想定しているようです。バッチ プログラムのように特定のユーザーを指定して対話なしでアプリケーションを実行可能かどうかがわからないので調べてみました。

SharePoint Server (オンプレミス) の場合

当たり前ですが NTLM が使えました。つまり NetworkCredential に Windows のユーザー名とパスワードを設定すれば解決します。

SharePoint Online の場合

SharePoint Online では NTLM は使えないので OAuth を使う必要があります。SharePoint が提供する SharePoint アドインの OAuth の仕組みでは、アクセス トークンを取得するまでのフローでログイン UI を表示させる必要があります。しかしそれではバッチ実行には向きません。ログイン UI をスキップするには、Azure AD の OAuth で grant_type=password とします。これでユーザー名とパスワードを渡してアクセス トークンを取得できます。なお grant_type=password は推奨されない方法だそうなので UI があるアプリケーションの開発ではログイン UI を表示することをお勧めします。

以下にサンプルを置いておきます。

https://github.com/karamem0/samples/tree/main/sharepoint-rest-password-credentials-flow

注意点としては以下の 3 点になります。

  • Azure AD でアプリケーションを登録して Client ID を取得しておくこと
  • 登録したアプリケーションに対して管理者の同意をしておくこと
  • SharePoint Online へのアクセス許可を設定しておくこと

Discussion