読者です 読者をやめる 読者になる 読者になる

からめもぶろぐ。

ワタシ SharePoint チョット デキル

SharePoint 2013 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