Microsoft Graph と SharePoint Online のリソース固有の同意について

これまで、Microsoft SharePoint では、オンプレミスとオンラインの両方で、特定のサイト コレクションのみを対象とする詳細なアクセス許可を持つ Azure Access Control Services (ACS) にアプリケーションを登録する機能がありました。 この手法を使用して、カスタム アプリケーションがアプリケーションのみのアクセス許可を持つ特定のサイト コレクションを読み取り、書き込み、管理、または完全に制御することを承認できました。

ただし、ACS は、SharePoint のアプリケーション登録とセキュリティを管理するための最適なオプションではなくなりました。 Microsoft Entra (旧称 Azure Active Directory) アプリケーションの登録と OAuth に依存する必要があります。 既定では、Microsoft Entraでアプリケーションを登録し、Sites.Read.AllSites.ReadWrite.All、Sites.Manage.AllSites.FullControl.All などの Microsoft Graph アプリケーションのアクセス許可を構成できます。これは、ターゲット テナント内のすべてのサイト コレクションを対象とするアクセス許可です。すべての単語は、アクセス許可スコープの名前で意味します。

すべてのターゲットは、特に何千ものサイト コレクションを持つ企業のお客様によって常に歓迎されるとは限りません。さらに詳細なアクセス許可を持ち、アプリケーションで読み取り、書き込み、管理、またはフル コントロールのアクセス許可を持つ必要があるターゲット サイト コレクションを選択できます。

重要

この記事では、いわゆる PnP コンポーネント、サンプル、ツールを参照します。これは、サポートを提供するアクティブなコミュニティによってサポートされるオープンソース資産です。 公式の Microsoft サポート チャネルのオープン ソース ツールのサポート用 SLA ではありません。 ただし、これらのコンポーネントまたはサンプルでは、Microsoft でサポートされている既製の API と、Microsoft でサポートされている機能が使用されています。

必要に応じて、記事全体を読む代わりに、次のビデオをwatchできます。これは、より詳細なリファレンスと見なすことができます。

IMAGE_ALT

注:

Azure ACS に依存するのではなく、Microsoft Entraでのアプリケーションの登録の詳細については、「Azure Access Control Service から Microsoft Entra への SharePoint アプリケーションのアップグレード」の記事を参照してください。

リソース固有の同意 (RSC) を使用すると、アプリケーションをMicrosoft Entraに登録し、ACS で使用したのと同様に、特定のサイト コレクションのみを対象にできるアプリケーション専用のアクセス許可を付与できます。 この記事では、この機能を利用する方法について説明します。

MICROSOFT ENTRA アプリケーションを RSC アクセス許可で登録するには、Microsoft Entraで通常のアプリケーションを登録するだけで済みます。 ただし、いずれかのサイトを選択するのではなく、アプリケーションの API アクセス許可を構成する場合 。<何か>。 Microsoft Graph のすべてのアプリケーションアクセス許可は、次のスクリーンショットに示すように、 Sites.Selected アプリケーションのアクセス許可を選択する必要があります。

Microsoft Graph を使用してアプリケーションの Sites.Selected アプリケーション権限を構成するときのMicrosoft Entraの UI。

その後、最終的には引き続き使用できるテナント管理者は、 Sites.Selected アプリケーションにアプリケーションへのアクセス許可を付与する必要があります。

また、Microsoft Graph を介して SharePoint Online を使用するのではなく、REST API を使用して SharePoint Online を使用する場合は、SharePoint Online の Sites.Selected アプリケーションアクセス許可もあります。 次のスクリーンショットでは、Microsoft Entraで SharePoint Online の Sites.Selected アクセス許可がどのように表示されるかを確認できます。

SharePoint Online を使用してアプリケーションの Sites.Selected アプリケーション権限を構成するときにMicrosoft Entraの UI。

特定のサイト コレクションへのアクセス許可の付与

Sites.Selected アプリケーションのアクセス許可が割り当てられ、付与されると、アプリケーションはどのターゲット サイト コレクションにもアクセスできなくなります。 任意のターゲット サイトにアクセスできるようにするには、テナント グローバル管理者、または Sites.FullControl.All アプリケーションアクセス許可を持つアプリケーションが、選択したターゲット サイトに対して明示的なアクセス許可を付与する必要があります。

Microsoft Graph を使用したアクセス許可の付与

選択したターゲット サイトにアクセス許可を付与するには、次の URL を対象とする Microsoft Graph API POST 要求を使用できます。

https://graph.microsoft.com/v1.0/sites/{siteId}/permissions

{siteId} は、ターゲット サイト コレクションの Microsoft Graph 固有の ID で、次のような形式です。

contoso.sharepoint.com,5a58bb09-1fba-41c1-8125-69da264370a0,9f2ec1da-0be4-4a74-9254-973f0add78fd

HTTP POST 要求の本文には、次のコード抜粋のような構造が必要です。

{
  "roles": ["{role}"],
  "grantedToIdentities": [{
    "application": {
      "id": "{clientId}",
      "displayName": "{application-name}"
    }
  }]
}

{role} には、次の値のいずれか、または次のいずれかの値の配列を指定できます。

  • read: アイテムのメタデータと内容を読み取る機能を提供します。
  • write: アイテムのメタデータと内容を読み取り、変更する機能を提供します。
  • 管理: アイテムのメタデータと内容を読み取って変更し、サイトを管理する機能を提供します。
  • fullcontrol: サイトとそのコンテンツを完全に制御します。

{client-id} 属性は、Microsoft Entra アプリケーションの実際のクライアント ID であり、{application-name} はアプリケーションの説明です。

Microsoft Graph から返される応答は、次の JSON ファイルのようになります。

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('contoso.sharepoint.com,5a58bb09-1fba-41c1-8125-69da264370a0,9f2ec1da-0be4-4a74-9254-973f0add78fd')/permissions/$entity",
  "id": "aTowaS50fG1zLnNwLmV4dHxlMDBiNWUzZi0yMzI1LTQ3MWQtOTljZi1iOGM5ZDlmNDU2N2FANmM5NDA3NWEtZGEwYS00YzZhLTg0MTEtYmFkZjY1MmU4YjUz",
  "roles": [
    "write"
  ],
  "grantedToIdentitiesV2": [
    {
      "application": {
        "displayName": "AddInGuidanceRSC",
        "id": "e00b5e3f-2325-471d-99cf-b8c9d9f4567a"
      }
    }
  ],
  "grantedToIdentities": [
    {
      "application": {
        "displayName": "AddInGuidanceRSC",
        "id": "e00b5e3f-2325-471d-99cf-b8c9d9f4567a"
      }
    }
  ]
}

応答の id プロパティは、カスタム割り当てアクセス許可を識別する一意の ID を表していることに注意してください。 その ID を使用して、REST を使用して既に割り当てられているアクセス許可を管理し、ターゲット サイト コレクションの アクセス許可/{permission-id} エンドポイントを対象とする GET、PATCH、または DELETE 要求を作成することもできます。{permission-id} はアクセス許可の一意の ID を表します。

明らかに、低レベルの HTTP 要求に依存するのではなく、Microsoft Graph SDK を使用してアクセス許可を管理することもできます。

PnP PowerShell を使用したアクセス許可の付与

選択したターゲット サイトに対するアクセス許可を付与および管理するには、一連の PnP PowerShell コマンドレットを使用することもできます。

たとえば、選択したサイトのターゲット アプリケーションに 書き込み アクセス許可を付与する場合は、次の PowerShell 構文を使用できます。

Grant-PnPAzureADAppSitePermission -AppId {client-id} -DisplayName {display-name} -Permissions <Read|Write|Manage|FullControl> -Site {site-object}

Microsoft Graph エンドポイントと同様に、{client-id} 引数はMicrosoft Entra アプリケーションのクライアント ID であり、{display-name} はアプリケーションの説明です。 Permissions 引数には、次の 1 つ以上の値を指定できます。

  • 読み取り: アイテムのメタデータと内容を読み取る機能を提供します。
  • 書き込み: アイテムのメタデータと内容を読み取り、変更する機能を提供します。
  • 管理: アイテムのメタデータと内容を読み取って変更したり、サイトを管理したりできます。
  • FullControl: サイトとそのコンテンツを完全に制御します。

{site-object} の値は 、Get-PnPSite コマンドレットを使用して取得したサイト オブジェクトにすることも、 Connect-PnPOnline コマンドレットに接続しているサイトを選択したサイトとしてターゲットに省略することもできます。

このようなコマンドの出力は、PowerShell コンソールの次のようになります。

Id    : aTowaS50fG1zLnNwLmV4dHxlMDBiNWUzZi0yMzI1LTQ3MWQtOTljZi1iOGM5ZDlmNDU2N2FANmM5NDA3NWEtZGEwYS00YzZhLTg0MTEtYmFkZjY
        1MmU4YjUz
Roles : {fullcontrol}
Apps  : {AddInGuidanceRSC, e00b5e3f-2325-471d-99cf-b8c9d9f4567a}

コマンドレットは、付与されたアクセス許可とアクセス許可オブジェクトの一意の ID を 返します。

選択したサイトのアクセス許可の割り当てを更新する場合は、次のような PowerShell 構文を使用できます。

Set-PnPAzureADAppSitePermission -PermissionId {permission-id} -Permissions <Read|Write|Manage|FullControl>

{permission-id} 引数は、Grant-PnPAzureADAppSitePermission コマンドレットを呼び出すときに返された ID です。

選択したサイトからアクセス許可付与を取り消す場合は、次の構文で Revoke-PnPAzureADAppSitePermission コマンドレットを使用できます。

Revoke-PnPAzureADAppSitePermission -PermissionId {permission-id}

注:

この記事に関連付けられている samples フォルダーには、RSC 用の PnP PowerShell コマンドレットを使用する方法を示すサンプル PowerShell スクリプトがあります。

ターゲット サイト コレクションの使用

Microsoft Entra アプリケーションを Sites.Selected アプリケーションのアクセス許可 (Microsoft Graph または SharePoint Online を使用) に登録した後、付与されたアクセス許可に従って、選択したサイト コレクションの使用を開始できます。

Microsoft Entraからアプリケーション専用アクセス トークンを要求し、選択したサイト コレクションの使用を開始する必要があります。 アプリケーションにアクセス許可が付与されているサイトをターゲットにする場合は、正常に実行されます。 アプリケーションにアクセス許可が付与されていない他のサイト コレクションをターゲットにする場合、コードは失敗し、"アクセスが拒否されました" という例外が表示されます。

SharePoint REST API を使用するか、アプリケーション専用トークンを使用して Microsoft Graph を使用して SharePoint Online を使用する方法の詳細については、「Azure Access Control Service から Microsoft Entra への SharePoint アプリケーションのアップグレード」の記事の「Azure AD 登録済みアプリケーションを使用して SharePoint Online をアプリ専用モードで使用する」セクションを参照してください。

注:

この記事に関連付けられている samples フォルダーには、RSC モデルを利用して SharePoint Online サイトを使用する方法を示す サンプル .NET 6 コンソール アプリケーション があります。

この記事に関する追加情報については、次のドキュメントを参照してください。