SharePoint Framework ソリューションでの Azure AD でセキュリティ保護された API への接続Connect to Azure AD-secured APIs in SharePoint Framework solutions

SharePoint Framework ソリューションを構築する際に、Azure Active Directory (Azure AD) でセキュリティ保護された API に接続する必要がある場合があります。When building SharePoint Framework solutions, you might need to connect to an API secured by using Azure Active Directory (Azure AD). SharePoint Framework では、ソリューションに必要な Azure AD アプリケーションとアクセス許可を指定することができ、テナント管理者は、まだ必要なアクセス許可が付与されていない場合はそれらを付与することができます。SharePoint Framework allows you to specify which Azure AD applications and permissions your solution requires, and a tenant administrator can grant the necessary permissions if they haven't yet been granted. AadHttpClient を使用すれば、OAuth フローを自分で実装しなくても、Azure AD でセキュリティ保護された API に簡単に接続できます。By using the AadHttpClient, you can easily connect to APIs secured by using Azure AD without having to implement the OAuth flow yourself.

Web API アクセス許可の概要Web API permissions overview

Azure AD は、Office 365 から、組織が構築したカスタム基幹業務アプリケーションまで、さまざまなリソースをセキュリティで保護しています。Azure AD secures a number of resources, from Office 365 to custom line-of-business applications built by the organization. これらのリソースに接続するには、アプリケーションが、特定のリソースへのアクセスを可能にする、有効なアクセス トークンを取得する必要があります。To connect to these resources, applications must obtain a valid access token that grants them access to a particular resource. アプリケーションは、アクセス トークンを OAuth 承認フローの一部として取得できます。Applications can obtain an access token as part of the OAuth authorization flow.

SharePoint Framework ソリューションなど、シークレットを保存できないクライアント側のアプリケーションは、OAuth 暗黙的フローと呼ばれる特別な種類の OAuth フローを使用します。Client-side applications that are incapable of storing a secret, such as SharePoint Framework solutions, use a specific type of OAuth flow named OAuth implicit flow.

クライアント側のソリューションを構築している開発者は、アプリケーション内で OAuth 暗黙的フローを使用することにより承認を実装する責任があります。Developers building client-side solutions are responsible for implementing authorization by using the OAuth implicit flow in their application. SharePoint Framework ソリューションでは、MSGraphClientAadHttpClient (どちらも SharePoint Framework v1.4.1 で導入) 経由でフレームワークの一部として既に実装されています。In SharePoint Framework solutions, that's already done as part of the framework through MSGraphClient and AadHttpClient, both of which are introduced in SharePoint Framework v1.4.1.

注意

v1.4.1 より前のバージョンの SharePoint Framework 上でソリューションを構築している場合でも、Azure AD でセキュリティ保護されたリソースに接続できます。If you build solutions on a version of the SharePoint Framework earlier than v1.4.1, you can still connect to resources secured with Azure AD. この場合は、ADAL JS を使用して OAuth 暗黙的フローを実装する必要があります。In this case, you need to implement the OAuth implicit flow by using ADAL JS. 詳細については、「Azure Active Directory でセキュリティ保護された API への接続」を参照してください。For more information, see Connect to API secured with Azure Active Directory.

SharePoint Framework の一部として、Azure AD でセキュリティ保護されたリソースへのアクセス許可を開発者が要求する方法と、テナント管理者が管理する方法に関する特定のプロセスが定義されています。As part of the SharePoint Framework, a specific process is defined for how developers can request permissions and tenant administrators can manage permissions to resources secured with Azure AD. 次の図はこの手順を示しています。The following schema illustrates this process.

Azure AD アプリケーションへのアクセス許可の要求、付与、使用のフローを示す図

Azure AD で保護された特定のリソースへのアクセスを要求する SharePoint Framework ソリューションを構築している開発者は、これらのリソースと、必要なアクセス許可のスコープをソリューション マニフェストにリストします。Developers building a SharePoint Framework solution that requires access to specific resources secured with Azure AD list these resources along with the required permission scopes in the solution manifest. ソリューション パッケージをアプリ カタログに展開する際、SharePoint はアクセス許可要求を作成し、管理者に要求したアクセス許可を管理するよう求めます。When deploying the solution package to the app catalog, SharePoint creates permission requests and prompts the administrator to manage the requested permissions. 要求されたアクセス許可それぞれに対して、テナント管理者は特定のアクセス許可を付与するか、拒否するかを決定できます。For each requested permission, tenant administrators can decide whether they want to grant or deny the specific permission.

すべてのアクセス許可は、それを要求した特定のアプリケーションではなく、テナント全体に付与されます。All permissions are granted to the whole tenant and not to a specific application that has requested them. テナント管理者が特定のアクセス許可を付与すると、それは SharePoint Online クライアント拡張機能 の Azure AD アプリケーションに追加されます。そして、Microsoft によってすべての Azure AD でプロビジョニングされ、SharePoint Framework は、ソリューションに有効なアクセス トークンを提供するために OAuth フローでそれを使用します。When the tenant administrator grants a specific permission, it is added to the SharePoint Online Client Extensibility Azure AD application, which is provisioned by Microsoft in every Azure AD and which is used by the SharePoint Framework in the OAuth flow to provide solutions with valid access tokens.

利用可能なアプリケーションとアクセス許可を検索するDiscover available applications and permissions

Office 365 テナントをセキュリティで保護しているターゲット Azure AD が、ソリューション内でアクセス許可を要求可能なアプリケーションを決定します。The target Azure AD that secures your Office 365 tenant determines which applications you can request permissions for in your solution. 利用可能なアプリケーションのリストは、組織が使用している Office 365 ライセンスと、Azure AD に登録された基幹業務アプリケーションによって異なる場合があります。The list of available applications might depend on the Office 365 license that the organization is using and which line-of-business applications they registered in Azure AD. 十分なアクセス許可を持っている場合は、テナントで利用可能なアプリケーションとアクセス許可のスコープを複数の方法で確認できます。If you have sufficient permissions, there are several ways that you can see which applications and permission scopes are available in your tenant.

Azure portal または Azure AD 管理センターを使用するUse Azure portal or Azure AD admin center

Azure AD で使用可能なアプリケーションを確認する方法の 1 つとして、Azure portal または Azure AD 管理センターに移動します。One way to see the available applications in Azure AD is by navigating to the Azure portal or to the Azure AD admin center.

  1. Azure AD 管理センターの左側のナビゲーションで、[エンタープライズ アプリケーション] リンクを選択します。In the Azure AD admin center, in the left navigation, choose the Enterprise applications link.

    Azure AD ポータルで強調表示されている [エンタープライズ アプリケーション] リンク

  2. [エンタープライズ アプリケーション] ブレードの [管理] グループで、[すべてのアプリケーション] リンクを選択します。On the Enterprise applications blade, in the Manage group, choose the All applications link.

    Azure AD ポータルで強調表示されている [すべてのアプリケーション]

  3. 接続したいアプリケーションを素早く探すには、アプリケーションの種類 (Microsoft アプリケーション_または_エンタープライズ アプリケーション) で概要をフィルターにかけるか、名前または ID を使用して検索できます。To quickly find the application to which you want to connect, you can filter the overview either by application type (Microsoft Applications or Enterprise Applications), or you can search for it by using its name or ID.

    たとえば、Microsoft Graph への追加のアクセス許可を要求したい場合は、検索ボックスで graph を検索します。For example, if you want to request additional permissions to the Microsoft Graph, in the search box you would search for graph.

    Azure AD ポータルで、利用可能な Azure AD アプリケーションのリストから「graph」を検索している

  4. アプリケーションを見つけたら、それを選択して追加の情報を確認します。After you find the application, choose it to get additional information. アプリケーションのブレードの [管理] グループで、[プロパティ] を選択してアプリケーションのプロパティを開きます。On the application's blade, in the Manage group, choose Properties to open the application's properties.

    Azure AD ポータルのアプリケーション ブレードで [プロパティ] リンクが強調表示されている

  5. プロパティのリストから、[オブジェクト ID] プロパティの値をコピーします。これは、Microsoft Graph に追加のアクセス許可のスコープを要求するために必要です。From the list of properties, copy the value of the Object ID property, which you need to request additional permission scopes to the Microsoft Graph. または、アプリケーションの [名前] をコピーし、アクセス許可要求内でそれを使用することもできます。Alternatively, you can copy the application's Name and use it in the permission request instead.

    Azure AD ポータルで、クリップボードにコピーされた [オブジェクト ID] プロパティの値

注意

[オブジェクト ID] はテナントごとに一意ですが、アプリケーションの [名前] はすべてのテナントで同じです。While the Object ID is unique for each tenant, the application's Name is the same across all tenants. ソリューションを一度だけ構築して、それを異なるテナントに展開したい場合、ソリューションで追加のアクセス許可を要求する際にはアプリケーションの [名前] を使用する必要があります。If you want to build your solution once and deploy it to different tenants, you should use the application's Name when requesting additional permissions in your solution.

Azure PowerShell を使用するUse Azure PowerShell

注意

次のステップを実行する前に、Azure PowerShell をインストールする必要があります。Before you can execute the following steps, you must install Azure PowerShell. または、Azure Cloud Shell PowerShell で、このセクションで説明されているコマンドレットを実行することもできます。Alternatively, you can execute the cmdlets mentioned in this section in the Azure Cloud Shell PowerShell.

  1. PowerShell で次を実行して、Azure サブスクリプションにサインインします (Azure Cloud Shell を使用している場合は必要ありません)。Sign in to your Azure subscription by executing in PowerShell (this is not necessary if you're using the Azure Cloud Shell):

    Login-AzureRmAccount
    
  2. 次を入力してテナントで利用可能なアプリケーションを一覧表示します。Enter the following to list the applications available in your tenant:

    Get-AzureRmADServicePrincipal | sort DisplayName | ft DisplayName, Id
    

    このコマンドレットを実行すると、テナントで使用可能なすべてのアプリケーションが一覧表示されます。Running this cmdlet lists all applications available in your tenant. アプリケーションごとに、その表示名とオブジェクト ID が表示されます。これらは、SharePoint Framework ソリューションでアプリケーション アクセス許可を要求するときに使用できます。For each application, its display name and object ID are displayed, which you can use in your SharePoint Framework solution to request application permissions.

Azure CLI を使用するUse Azure CLI

注意

次の手順を実行する前に、Azure CLI をインストールする必要があります。Before you can execute the following steps, you must install the Azure CLI. または、Azure Cloud Shell で、あるいは Docker コンテナーとして Azure CLI を実行することもできます。Alternatively, you can run the Azure CLI through the Azure Cloud Shell or as a Docker container.

  1. CLI を自分のマシンまたは Docker コンテナーで実行している場合は、まず、次を実行して、Azure サブスクリプションに接続します。If you're running the CLI on your machine or in a Docker container, start by connecting to your Azure subscription by executing:

    azure login
    
  2. 接続したら、次のコマンドを実行して、利用可能なすべての Azure AD アプリケーションを一覧表示します。After you're connected, execute the following command to list all available Azure AD applications:

    azure ad sp list --query "sort_by([*].{displayName: displayName, objectId: objectId}, &displayName)" -o table
    

    このコマンドを実行すると、テナントで利用可能なすべての Azure AD アプリケーションが displayName の順に一覧表示されます。Running this command lists all Azure AD applications available in your tenant, sorted by displayName. アプリケーションごとに、displayName と objectId がコマンドによって表示されます。For each application, the command displays its displayName and objectId. 加えて、その出力は表形式で表示されます。Additionally, the output is formatted as a table.

アプリケーションによって公開されるアクセス許可のスコープのリストを取得するGet the list of permission scopes exposed by the application

各 Azure AD アプリケーションは、いくつかのアクセス許可のスコープを公開します。Each Azure AD application exposes a number of permission scopes. これらのアクセス許可のスコープは多くの場合、アプリケーション内の特定のリソースか操作と関連しています。These permission scopes often relate to specific resources or operations inside the application. 接続したいアプリケーションで利用可能なアクセス許可のリストを取得するには、ドキュメンテーションを参照してください。To get the list of permissions available for the application you would like to connect to, consult its documentation. Microsoft Graph で利用可能なアクセス許可のスコープの一覧については、「Microsoft Graph のアクセス許可のリファレンス」を参照してください。For the list of permission scopes available in the Microsoft Graph, see Microsoft Graph permissions reference.

Azure AD アプリケーションへのアクセス許可を要求するRequest permissions to an Azure AD application

SharePoint Framework ソリューションが、Microsoft Graph やエンタープライズ アプリケーションなど、Azure AD でセキュリティ保護された特定のリソースへのアクセス許可を必要とする場合、これらのリソースと、必要なアクセス許可をソリューションの構成で指定できます。If your SharePoint Framework solution requires permissions to specific resources secured with Azure AD, such as Microsoft Graph or enterprise applications, you can specify these resources along with the necessary permissions in the configuration of your solution.

  1. SharePoint Framework プロジェクトで、config/package-solution.json ファイルを開きます。In your SharePoint Framework project, open the config/package-solution.json file.

  2. solution プロパティに、ソリューションに必要なすべてのリソースと対応するアクセス許可を一覧表示する webApiPermissionRequests プロパティを追加します。To the solution property, add the webApiPermissionRequests property that lists all the resources and corresponding permissions that your solution needs.

    次に、Microsoft Graph を使用してユーザーの予定表を読み取るためのアクセス許可を要求する SharePoint Framework ソリューションの例を示します。Following is an example of a SharePoint Framework solution requesting access to read user calendars by using the Microsoft Graph:

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
      "solution": {
        "name": "spfx-graph-client-side-solution",
        "id": "5d16587c-5e87-44d7-b658-1148988f212a",
        "version": "1.0.0.0",
        "includeClientSideAssets": true,
        "skipFeatureDeployment": true,
        "webApiPermissionRequests": [
          {
            "resource": "Microsoft Graph",
            "scope": "Calendars.Read"
          }
        ]
      },
      "paths": {
        "zippedPackage": "solution/spfx-graph.sppkg"
      }
    }
    

    注意

    resource プロパティの値には、アクセス許可を要求するアプリケーションの displayName を指定する必要があります。For the value of the resource property, you need to specify the displayName of the application to which you want to request permissions. リソースの指定に objectId を使用すると、アクセス許可の要求を承認しようとしたときにエラーが発生します。If you specify the resource using its objectId, you will get an error when trying to approve the permission request.

  3. 特定のリソースへの複数のアクセス許可のスコープを要求したい場合、次の例のように別々のエントリで各スコープを指定します。If you want to request multiple permission scopes for the given resource, specify each scope in a separate entry, for example:

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
      "solution": {
        "name": "spfx-graph-client-side-solution",
        "id": "5d16587c-5e87-44d7-b658-1148988f212a",
        "version": "1.0.0.0",
        "includeClientSideAssets": true,
        "skipFeatureDeployment": true,
        "webApiPermissionRequests": [
          {
            "resource": "Microsoft Graph",
            "scope": "Calendars.Read"
          },
          {
            "resource": "Microsoft Graph",
            "scope": "User.ReadBasic.All"
          }
        ]
      },
      "paths": {
        "zippedPackage": "solution/spfx-graph.sppkg"
      }
    }
    
  4. このソリューションが SharePoint アプリ カタログに展開されている場合、管理者は要求されたアクセス許可を確認し、それを付与または拒否するよう求められます。When this solution is deployed to the SharePoint app catalog, it prompts the administrator to verify the requested permissions and either grant or deny them.

    注意

    管理者が要求されたアクセス許可を拒否するか承認するかに関わりなく、ソリューションをサイトに展開して使用することができます。No matter if the administrator denies or approves the requested permissions, the solution can be deployed and used on sites. 追加のアクセス許可を要求するソリューションを構築する場合、要求したアクセス許可は付与されていると想定するべきではありません。When building solutions that require additional permissions, you should never assume that the requested permissions have been granted.

アクセス許可要求を管理するManage permission requests

Azure AD アプリケーションにアクセス許可を要求する SharePoint Framework ソリューションを展開する場合、管理者はソリューションで提供されているアクセス許可要求を管理するよう求められます。When deploying SharePoint Framework solutions that request permissions to Azure AD applications, administrators are prompted to manage the permission request provided with the solution. アクセス許可要求は、複数の方法で管理できます。Permission requests can be managed in several ways.

Office 365 Admin ポータルでアクセス許可を管理するManage permissions in the Office 365 Admin portal

Office 365 テナントの管理者は、新しい SharePoint 管理センターから、アクセス許可の付与と要求を管理できます。Office 365 tenant administrators can manage permission grants and requests through the web UI from the modern SharePoint admin center.

  1. Office 365 ポータルのランディング ページに移動して、最新の SharePoint 管理センターを開きます。Open the modern SharePoint admin center by navigating to the Office 365 portal landing page. 組織のアカウントを使用してサインインします。Sign in with your organizational account.
  2. アプリのリストから、[管理] を選択します。From the list of apps, choose Admin.
  3. Office 365 Admin センターの [管理センター] グループで、[SharePoint] を選択します。In the Office 365 Admin center, in the Admin centers group, choose SharePoint.
  4. SharePoint 管理センターで、[新しい SharePoint 管理センターをお試しください] リンクを選択します。In the SharePoint admin center, choose the Try the new SharePoint admin center link.

Office 365 テナントの管理者が最新の SharePoint 管理センターから Web UI を介してアクセス許可の付与と要求を管理可能な方法を以下に示します。Following are some ways that Office 365 tenant administrators can manage permission grants and requests through the web UI from the modern SharePoint admin center.

  • 保留中のアクセス許可要求を表示するには、最新の SharePoint 管理センターの左側のウィンドウで、[WebApiPermission 管理] (スクリーンショットでは [API Management]) を選択します。To view pending permission requests, in the modern SharePoint admin center, in the left pane, choose WebApiPermission management (API management in the screenshot).

    新しい SharePoint 管理センターで強調表示されている [WebApiPermission management] リンク

    すべての保留中のアクセス許可要求が、Web API アクセス許可要求のリスト内で強調表示されます。All pending permissions requests will be highlighted in the list of web API permissions.

    Web API アクセス許可のリスト内で強調表示されている、保留中のアクセス許可要求

  • 保留中のアクセス許可要求を承認するには、アクセス許可の一覧で要求を選択し、ツールバーで、[承認または拒否する] を選択します。To approve a pending permission request, select the request in the list of permissions, and on the toolbar, choose Approve or reject. [アクセスを承認または拒否する] ウィンドウで、[承認] を選択します。In the Approve or reject access pane, choose Approve.

    選択した Web API アクセス許可要求に対して表示されている、[アクセスを承認または拒否する] ウィンドウ

    要求が承認された後、リスト内のアクセス許可が変更され、許可が付与されたことを示します。After the request has been approved, the permission changes in the list, indicating that it has been granted.

    注意

    既にいくつかのアクセス許可が付与されているリソースに対するアクセス許可要求を承認しようとすると (たとえば、Microsoft Graph に対して追加のアクセス許可を付与する場合)、要求されたスコープが既に付与されているアクセス許可に追加されます。If you try to approve a permission request for a resource that already has some permissions granted (for example, granting additional permissions to the Microsoft Graph), the requested scopes are added to the previously granted permissions.

  • 保留中のアクセス許可要求を拒否するには、アクセス許可の一覧で要求を選択し、ツールバーで、[承認または拒否する] を選択します。To reject a pending permission request, select the request in the list of permissions, and on the toolbar, choose Approve or reject. [アクセスを承認または拒否する] ウィンドウで、[拒否] を選択します。In the Approve or reject access pane, choose Reject.

    選択した Web API アクセス許可要求に対して表示されている、[アクセスを承認または拒否する] パネル

    要求が拒否された後は、Web API アクセス許可の一覧に表示されなくなります。After the request has been rejected, it is no longer visible in the list of web API permissions.

    注意

    アプリ カタログに展開されているソリューションが発行したアクセス許可要求を拒否しても、そのソリューションには影響を与えず、アプリ カタログに展開されたままになります。Rejecting a permission request issued by a solution deployed in the app catalog doesn't affect that solution, and it remains deployed in the app catalog. 要求したアクセス許可が拒否されているため、ソリューションは期待どおりに動作しない可能性があります。Because the requested permissions have been denied, the solution might not be working as expected. 開発者は、要求したすべてのアクセス許可が付与されていると仮定してはいけません。そうでない場合は、適切に処理を中止する必要があります。Developers should never assume that all requested permissions have been granted and should fail gracefully if this is not the case.

  • 既に付与されているアクセス許可のセットを取り消すには、アクセス許可のリストで許可を選択し、ツールバーで、[アクセス許可の削除] を選択します。To revoke a previously granted set of permissions, select the grant in the list of permissions, and on the toolbar, choose Remove access. [アクセス許可の削除] ウィンドウで、[削除] を選択します。In the Remove access pane, choose Remove.

    選択した付与済みの Web API アクセス許可に対して表示されている、[アクセス許可の削除] ウィンドウ

    許可が削除された後は、Web API アクセス許可のリストに表示されなくなります。After the grant has been removed, it is no longer visible in the list of web API permissions.

    注意

    以前に付与されたアクセス許可のセットを削除すると、そうしたアクセス許可に依存している、テナントで使用されているすべてのソリューションは、その状況を適切に処理していないとエラーが発生します。Removing a previously granted set of permissions could yield errors in all solutions used in your tenant that rely on those permissions unless they handle it gracefully. 特定の付与済みのアクセス許可を削除する前に、テナントに生じる影響を注意深く検討する必要があります。Before removing the specific permission grant, you should closely examine the impact that it will have on your tenant. 付与済みのアクセス許可を間違って削除した場合、同じリソースとスコープで新たにアクセス許可要求を発行することにより復元できます。If you accidentally removed a permission grant, you can restore it by issuing a new permission request with the same resource and scope.

    付与されたアクセス許可を取り消しても、以前に発行されたアクセス トークンは無効になりません。Revoking granted permissions doesn't invalidate previously issued access tokens. それらは期限が切れるまで有効に保たれます。Instead, they remain valid until they expire.

  • 既に付与されたアクセス許可を表示するには、最新の SharePoint 管理センターの左側のウィンドウで、[API 管理] を選択します。To view all previously granted permissions, in the modern SharePoint admin center, in the left pane, choose API management. すべての付与されたアクセス許可が [承認済み] セクションに表示されます。All granted permissions are displayed in the Approved section.

    WebApiPermission 管理ページに表示された、付与されたアクセス許可

PowerShell でのアクセス許可の管理Manage permissions with PowerShell

SharePoint テナント管理者は、SharePoint Online 管理シェルを使用して SharePoint Online のアクセス許可とアクセス許可要求を管理できます。SharePoint tenant administrators can use the SharePoint Online Management Shell to manage permissions and permission requests in SharePoint Online.

  • すべての保留中のアクセス許可要求を表示するには、Get-SPOTenantServicePrincipalPermissionRequests コマンドレットを使用します。To view all pending permission requests, use the Get-SPOTenantServicePrincipalPermissionRequests cmdlet. 各アクセス許可要求に対して、コマンドレットは、ID (要求の承認または拒否に必要)、アクセス許可が要求されたリソース、および要求されたアクセス許可を一覧表示します。For each permission request, the cmdlet lists its ID (required to either approve or deny the request), the resource for which permissions have been requested, and the requested permissions.

    注意

    SharePoint は、要求されたアクセス許可がすでに付与されているかどうかを検証しないので、アクセス許可要求を承認または拒否する前に、テナントですでに付与されているアクセス許可を確認する必要があります。SharePoint doesn't verify if the requested permissions have already been granted or not, so before approving or rejecting a permission request, check which permissions have already been granted in your tenant.

  • 特定のアクセス許可要求を承認するには、Approve-SPOTenantServicePrincipalPermissionRequest -RequestId <Guid> コマンドレットを使用して、承認したいアクセス許可要求の ID を指定します。To approve the specific permission request, use the Approve-SPOTenantServicePrincipalPermissionRequest -RequestId <Guid> cmdlet, specifying the ID of the permission request that you want to approve.

    注意

    既に付与されているアクセス許可の要求を承認しようとすると、エラーが表示されます。If you try to approve a request for a permission that has already been granted, you get an error.

  • アクセス許可要求を拒否する (要求されたアクセス許可が既に付与されているか、要求が組織のポリシーに違反している場合) には、Deny-SPOTenantServicePrincipalPermissionRequest -RequestId <Guid> コマンドレットを使用して、拒否したいアクセス許可要求の ID を指定します。To deny a permission request (if the requested permission has already been granted, or the request is against your organizational policies), use the Deny-SPOTenantServicePrincipalPermissionRequest -RequestId <Guid> cmdlet, specifying the ID of the permission request that you want to deny.

    注意

    SharePoint Framework アプリケーションが発行したアクセス許可要求を拒否しても、アプリケーションのアプリ カタログへの展開と、サイトへのインストールは妨げられません。Denying a permission request issued by a SharePoint Framework application doesn't prevent that application from being deployed in the app catalog and installed on sites.

  • テナントで付与されているアクセス許可を表示するには、Get-SPOTenantServicePrincipalPermissionGrants コマンドレットを使用します。To view which permissions have been granted in your tenant, use the Get-SPOTenantServicePrincipalPermissionGrants cmdlet. 許可ごとに、コマンドレットが次の情報を表示します。For each grant, the cmdlet displays the following information:

    • ClientId: (resourceId で示される) リソースにアクセスする際にユーザーに偽装する同意が与えられた、サービス プリンシパルの objectId です。ClientId: The objectId of the service principal granted consent to impersonate the user when accessing the resource (represented by the resourceId).
    • ConsentType: 同意が組織を代表して管理者によって与えられたか、または同意が個人によって与えられたか。ConsentType: Whether consent was provided by the administrator on behalf of the organization or whether consent was provided by an individual. 可能な値は、"AllPrincipals" または "Principal" です。The possible values are "AllPrincipals" or "Principal".
    • ObjectId: 付与済みのアクセス許可の一意識別子です。ObjectId: The unique identifier for the permission grant.
    • Resource: アクセスが許可されたリソースです。Resource: The resource to which access has been granted.
    • ResourceId: アクセスが許可されたリソース サービス プリンシパルの objectId です。ResourceId: The objectId of the resource service principal to which access has been granted.
    • Scope: リソース アプリケーションが予期すべき、OAuth 2.0 アクセス トークン内のスコープ要求の値です。Scope: The value of the scope claim that the resource application should expect in the OAuth 2.0 access token.
  • 既に付与されたアクセス許可を取り消すには、Revoke-SPOTenantServicePrincipalPermission -ObjectId <String> コマンドレットを使用します。To revoke a previously granted permission, use the Revoke-SPOTenantServicePrincipalPermission -ObjectId <String> cmdlet. ObjectId パラメーターで、取り消したい許可の ObjectId (Get-SPOTenantServicePrincipalPermissionGrants コマンドレットで取得できる) を指定する必要があります。In the ObjectId parameter, you should specify the objectId of the grant that you want to revoke, which you can obtain by using the Get-SPOTenantServicePrincipalPermissionGrants cmdlet.

    注意

    アクセス許可を取り消しても、アプリ カタログや展開されたアプリケーションには何の変更も加えられません。Revoking a permission doesn't trigger any changes to the app catalog or any of the deployed applications. アクセス許可の取り消しによる唯一の影響は、テナントで使用されているすべてのアプリケーションが、アクセス許可が取り消されたリソースへの接続ができなくなるということです。The only consequence of revoking a permission is that any application used in the tenant will not be able to connect to the resources for which the permission has been revoked.

Office 365 CLI を使用する、アクセス許可の管理Manage permissions using the Office 365 CLI

SharePoint テナント管理者は、Office 365 CLI を使用して、SharePoint Online のアクセス許可とアクセス許可要求を管理できます。SharePoint tenant administrators can use the Office 365 CLI to manage permissions and permission requests in SharePoint Online.

  • すべての保留中のアクセス許可要求を表示するには、spo serviceprincipal permissionrequest list コマンドを使用します。To view all pending permission requests, use the spo serviceprincipal permissionrequest list command. アクセス許可要求ごとに、コマンドは、ID (要求の承認または拒否に必要)、アクセス許可が要求されたリソース、および要求されたアクセス許可を一覧表示します。For each permission request, the command lists its ID (required to either approve or deny the request), the resource for which permissions have been requested, and the requested permissions.

    注意

    SharePoint は、要求されたアクセス許可がすでに付与されているかどうかを検証しないので、アクセス許可要求を承認または拒否する前に、テナントですでに付与されているアクセス許可を確認する必要があります。SharePoint doesn't verify if the requested permissions have already been granted or not, so before approving or rejecting a permission request, check which permissions have already been granted in your tenant.

  • 特定のアクセス許可要求を承認するには、spo serviceprincipal permissionrequest approve コマンドを使用して、承認したいアクセス許可要求の ID を指定します。To approve a specific permission request, use the spo serviceprincipal permissionrequest approve command, specifying the ID of the permission request that you want to approve.

    注意

    既に付与されているアクセス許可の要求を承認しようとすると、エラーが表示されます。If you try to approve a request for a permission that has already been granted, you get an error.

  • アクセス許可要求を拒否する (要求されたアクセス許可が既に付与されているか、要求が組織のポリシーに違反している場合) には、spo serviceprincipal permissionrequest deny コマンドを使用して、拒否したいアクセス許可要求の ID を指定します。To deny a permission request (if the requested permission has already been granted, or the request is against your organizational policies), use the spo serviceprincipal permissionrequest deny command, specifying the ID of the permission request that you want to deny.

    注意

    SharePoint Framework アプリケーションが発行したアクセス許可要求を拒否しても、アプリケーションのアプリ カタログへの展開と、サイトへのインストールは妨げられません。Denying a permission request issued by a SharePoint Framework application doesn't prevent that application from being deployed in the app catalog and installed on sites.

  • テナントで付与されているアクセス許可を表示するには、spo serviceprincipal grant list コマンドを使用します。To view which permissions have been granted in your tenant, use the spo serviceprincipal grant list command. 許可ごとに、コマンドが次の情報を表示します。For each grant, the command displays the following information:

    • ObjectId: 付与済みのアクセス許可の一意識別子です。ObjectId: The unique identifier for the permission grant.
    • Resource: アクセスが許可されたリソースです。Resource: The resource to which access has been granted.
    • ResourceId: アクセスが許可されたリソース サービス プリンシパルの objectId です。ResourceId: The objectId of the resource service principal to which access has been granted.
    • Scope: リソース アプリケーションが予期すべき、OAuth 2.0 アクセス トークン内のスコープ要求の値です。Scope: The value of the scope claim that the resource application should expect in the OAuth 2.0 access token.
  • 既に付与されたアクセス許可を取り消すには、spo serviceprincipal grant revoke コマンドを使用します。To revoke a previously granted permission, use the spo serviceprincipal grant revoke command. grantId パラメーターで、取り消したい許可の ObjectId (spo serviceprincipal grant list コマンドで取得できる) を指定します。In the grantId parameter, specify the objectId of the grant that you want to revoke, which you can obtain by using the spo serviceprincipal grant list command.

    注意

    アクセス許可を取り消しても、アプリ カタログや展開されたアプリケーションには何の変更も加えられません。Revoking a permission doesn't trigger any changes to the app catalog or any of the deployed applications. アクセス許可の取り消しによる唯一の影響は、テナントで使用されているすべてのアプリケーションが、アクセス許可が取り消されたリソースへの接続ができなくなるということです。The only consequence of revoking a permission is that any application used in the tenant will not be able to connect to the resources for which the permission has been revoked.

AadHttpClient を使用する、Azure AD アプリケーションへの接続Connect to Azure AD applications using the AadHttpClient

バージョン 1.4.1 より、SharePoint Framework は Azure AD でセキュリティ保護された API への接続を簡略化しています。Starting from version 1.4.1, SharePoint Framework simplifies connecting to APIs secured with Azure AD. 新しい AadHttpClient を使用すれば、認証と承認を自分で実装しなくても、Azure AD でセキュリティ保護された API に簡単に接続できます。Using the new AadHttpClient, you can easily connect to APIs secured with Azure AD without having to implement authentication and authorization yourself.

内部的には、AadHttpClient が、有効なアクセス トークンを取得するために SharePoint Online クライアント拡張機能サービス プリンシパルを使用して、ADAL JS を使用する Azure AD OAuth フローを実装します。Internally, the AadHttpClient implements the Azure AD OAuth flow using ADAL JS by using the SharePoint Online Client Extensibility service principal to obtain a valid access token. SharePoint Online クライアント機能拡張サービス プリンシパルは、Microsoft によってプロビジョニングされ、すべての Office 365 テナントの Azure AD で利用できます。The SharePoint Online Client Extensibility service principal is provisioned by Microsoft and is available in the Azure AD of all Office 365 tenants.

  1. SharePoint Framework ソリューションで AadHttpClient を使用するには、メインの Web パーツ ファイルに次の import 句を追加します。To use the AadHttpClient in your SharePoint Framework solution, add the following import clause in your main web part file:

    import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
    
  2. 接続したいリソースをパラメーターとして渡して、AadHttpClient の新しいインスタンスを取得します。Get a new instance of the AadHttpClient, passing the resource to which you want to connect as parameters:

    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
      public render(): void {
        // ...
    
        this.context.aadHttpClientFactory
          .getClient('https://contoso.azurewebsites.net')
          .then((client: AadHttpClient): void => {
            // connect to the API
          });
      }
    
      // ...
    }
    

    注意

    AadHttpClient の各インスタンスは特定のリソースにリンクされるので、接続したい各リソースに対してクライアントの新しいインスタンスを作成する必要があります。Each instance of the AadHttpClient is linked to the specific resource, which is why you need to create a new instance of the client for each resource that you want to connect to.

  3. リソースの AadHttpClient をインスタンス化したら、API と通信するための Web 要求を発行することができます。この例では、API がプロジェクトの他の場所で定義されたカスタム Order インターフェイスによって表現される順序の一覧を返します。After you instantiate the AadHttpClient for your resource, you can issue a web request to communicate with your API; in this example, the API returns a list of orders represented by the custom Order interface defined elsewhere in the project:

    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
      public render(): void {
        // ...
    
        this.context.aadHttpClientFactory
          .getClient('https://contoso.azurewebsites.net')
          .then((client: AadHttpClient): void => {
            client
              .get('https://contoso.azurewebsites.net/api/orders', AadHttpClient.configurations.v1)
              .then((response: HttpClientResponse): Promise<Order[]> => {
                return response.json();
              })
              .then((orders: Order[]): void => {
                // process data
              });
          });
      }
    
      // ...
    }
    

考慮事項Considerations

Web API のアクセス許可を扱う際には、次の事柄を考慮する必要があります。Following are some considerations that you should take into account when working with web API permissions.

SharePoint Framework ソリューションを介してアクセス許可を要求するRequest permissions via SharePoint Framework solutions

現時点では、追加のアクセス許可を要求できるのは SharePoint Framework を介する場合のみです。At this moment, it's only possible to request additional permissions through a SharePoint Framework solution. アクセス許可要求を含むソリューション パッケージ (.sppkg) がアプリ カタログに展開されると、要求が開始されます。The request is initiated when the solution package (.sppkg) containing a permissions request is deployed in the app catalog. 要求が開始されると、テナント管理者による承認または拒否が可能になります。After the request is initiated, it can be approved or denied by the tenant administrator.

付与されたアクセス許可は、すべてのソリューションに適用されるGranted permissions apply to all solutions

Azre AD リソースへのアクセス許可は、1 つの SharePoint Framework ソリューションによって要求されますが、付与されると、テナント全体に適用されてそのテナントのすべてのソリューションで使用できるようになります。Although permissions to Azure AD resources are being requested by a SharePoint Framework solution, once granted, they apply to the whole tenant and can be leveraged by any solution in that tenant.

ソリューションの削除はアクセス許可を取り消さないRemoving solution doesn't revoke permissions

最初に特定のアクセス許可を要求したソリューションを削除しても、付与されたアクセス許可は取り消されません。Removing the solution that initially requested the particular permission doesn't revoke the granted permission. テナント管理者は、SharePoint Framework アプリケーションの要求によって付与されたアクセス許可を、手動で取り消す必要があります。Tenant administrators have to manually revoke permissions granted through SharePoint Framework application requests.

以前に付与されたアクセス許可を取り消しても、発行されたアクセス トークンは無効にならないRevoking previously granted permissions doesn't invalidate issued access tokens

既に付与されたアクセス許可を取り消しても、ユーザーに発行されたアクセス トークンは無効になりません。Revoking previously granted permissions doesn't invalidate access tokens issued to users. これらのアクセス トークンは、期限が切れるまで有効に保たれます。Instead, these access tokens remain valid until they expire.

アクセス許可要求は、ソリューションの展開に影響しないPermission request doesn't affect solution deployment

管理者が、ソリューションによって要求されたアクセス許可を拒否するか承認するかに関わりなく、ソリューションはサイトに展開して使用することができます。No matter if the administrator denies or approves permissions requested by the solution, the solution can be deployed and used on sites. 追加のアクセス許可を要求するソリューションを構築する場合、要求したアクセス許可は付与されていると想定するべきではありません。When building solutions that require additional permissions, you should never assume that the requested permissions have been granted.

SharePoint Online クライアント サービス プリンシパルのコントロールControl the SharePoint Online Client service principal

Web API 要求によって付与されたすべてのアクセス許可は、SharePoint Online クライアント拡張機能の Azure AD アプリケーションに保存されます。All permissions granted through web API requests are stored with the SharePoint Online Client Extensibility Azure AD application. テナント管理者が、開発者に Web API 要求モデルと、MSGraphClient および AadHttpClient をソリューション内で使用させたくない場合、PowerShell で Disable-SPOTenantServicePrincipal コマンドレットを使用して、SharePoint Online クライアント拡張機能サービス プリンシパルを無効にできます。If tenant administrators don't want developers to use the web API request model and the MSGraphClient and AadHttpClient in their solutions, they can disable the SharePoint Online Client Extensibility service principal through PowerShell by using the Disable-SPOTenantServicePrincipal cmdlet.

サービス プリンシパルは、Enable-SPOTenantServicePrincipal コマンドレットを使用して再度有効にできます。The service principal can be re-enabled by using the Enable-SPOTenantServicePrincipal cmdlet. あるいは、Office 365 CLI で spo serviceprincipal set コマンドを使用して、SharePoint Online クライアント拡張機能サービス プリンシパルを有効または無効にすることもできます。Alternatively, it's also possible to enable and disable the SharePoint Online Client Extensibility service principal through the Office 365 CLI by using the spo serviceprincipal set command.