からめもぶろぐ。

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

SharePoint Framework のデプロイを自動化する

(2018/08/14 追記) 説明が足りない箇所があったため全体的に書き直しました。

2017/11 に SharePoint ALM API が提供されました。これにより、SharePoint アプリ (Add-ins) や SharePoint Framework のアプリのビルドとデプロイを自動化できるようになりました。

docs.microsoft.com

じゃあ実際やってみたらどうなるのということでやってみました。

サンプル コード

github.com

前提として gulp はインストールされている必要があります。

タスク

  • マニフェストの cdnBasePath を書き換える。
  • npm パッケージを復元する。
  • ソース ファイルをビルド (gulp bundle) する。
  • ソリューション パッケージを作成 (gulp package-solution) する。
  • ソース ファイルをアップロードする。
  • ソリューション パッケージをアプリ カタログにアップロードする。
  • ソリューション パッケージを展開する。
  • ソリューション パッケージをインストールする。

OAuth について

毎度出てくる OAuth の話。SharePoint の場合、Azure AD に登録したアプリではクライアント シークレットを使った Client Credentials Grant ができません。正確にはアクセス トークンは取得できるのですが、アクセス トークンを使って API を呼ぼうとすると「Unsupported app only token.」というエラー メッセージが返されます。

blog.mastykarz.nl

証明書を使ってもいいのですが、とても面倒なので、SharePoint で提供されている OAuth (Azure ACS に基づいた承認フロー) を使用することにします。

Granting access via Azure AD App-Only | Microsoft Docs

AppRegNew.aspx からアプリを登録します。

AppInv.aspx からアクセス許可を設定します。「AllowAppOnlyPolicy="true"」とするのがミソです。

アクセス許可を付与します。

これでクライアント シークレットを使ってアクセス トークンを取得する準備ができました。トークンを取得するときの URL は「https://login.microsoftonline.com」ではなく「https://accounts.accesscontrol.windows.net」になります。また client_id や resource に設定する値も Azure AD のお作法とは異なりますので注意が必要です。*1

*1:このあたりの実装を詳しく知りたい場合は TokenHelper.cs を確認する必要があります。