からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

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 を取得できるようです。

blogs.msdn.microsoft.com

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

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

github.com

注意点としては、Azure AD でアプリケーションを登録して Client ID を取得しておくことと、SharePoint Online へのアクセス許可を設定しておくことです。アクセス許可がないとエラーになります。

f:id:karamem0:20160519001750p:plain

(2017/06/13追記)
なんかこの方法できなくなってるっぽい?