からめもぶろぐ。

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

SharePoint Framework の分離された Web パーツを使ってみる

SharePoint Framework 1.8.0 から分離された Web パーツという機能が使用できるようになっています。

docs.microsoft.com

リンク先の説明を読んでいただければわかるのですが、簡単な説明をすると、分離された Web パーツは以下の 2 つの機能を持ちます。

  • Web パーツに専用の Azure Active Directory のアプリケーションが作成されます。通常の Web パーツでは Microsoft Graph や Azure Active Directory で保護された Web API へのアクセス許可はテナント レベルで共有されます。しかし、これだと特定の Web パーツ向けに作成した Web API が他の Web API から呼べてしまうというセキュリティの問題を抱えることになります。その問題を解決するため、アプリケーションを分離し、独自のアクセス許可を与えることができるようにします。
  • Web パーツは iframe に埋め込まれ別のドメインで動作します。これはかつての SharePoint ホスト型アドインの表示方法と同じと考えることができます。別のドメインで動作しますが SharePoint REST API の呼び出しは通常通り行えます。

分離された Web パーツはスキャフォールディングのときに指定できます。

? Will the components in the solution require permissions to access web APIs that are unique and not shared with other c
omponents in the tenant? (y/N)

または package-solution.json で isDomainIsolated を true に指定します。

注意点として、Web パーツはサイト コレクションのアプリ カタログにはデプロイできません。テナントのアプリ カタログにデプロイする必要があります。

実際に Web パーツをデプロイしてみます。
SharePoint 管理者ポータルには「分離」としてアクセス許可の承認ができるようになっています。

f:id:karamem0:20200508140525p:plain

Azure ポータルからアプリケーションが作成されていることが確認できます。

f:id:karamem0:20200508140542p:plain

F12 開発者ツールで見ると Web パーツが iframe 内に表示されているのがわかります。

f:id:karamem0:20200508140601p:plain

iframe になることで表示のパフォーマンスは劣化します。そのため、カスタムの Web API を使う場合のみ、この機能を有効にするといいと思います。