からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

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

SharePoint 2013 では REST API が使用できるのですが、MSDN ではプロバイダー ホスト型 SharePoint アドインから OAuth で使用する場合の説明がほとんどです。例えば、バッチ プログラムのような、特定のユーザーを指定して対話なしでアプリケーションを実行するようなことができるかどうかわからなかったので、ちょっと調べてみました。

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

当たり前ですが NTLM が使えました。要は NetworkCredential にユーザー名とパスワードを突っ込んで渡してあげればそれで解決ですね。

SharePoint Online の場合

SharePoint Online では NTLM は使えないので、OAuth を使うしかありません。SharePoint が提供する SharePoint アドインの OAuth の仕組みでは、Access Token を取得するまでのフローで、どうしても画面を表示させる必要があります。それではバッチ実行には向かないので、画面をスキップできる方法を探したところ、Azure AD の OAuth で grant_type=password とすることで、ユーザー名とパスワードを渡して Access Token を取得できるようです。

なお grant_type=password は推奨されない方法だそうなので UI があるアプリケーションの開発では普通に認証するのがよいと思います。

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

github.com

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

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