次の方法で共有


プログラムによる API アクセス許可の付与または取り消し

Microsoft Entra IDでクライアント アプリに API アクセス許可を付与すると、そのアクセス許可は、他のデータと同様に読み取り、更新、または削除するオブジェクトとして記録されます。 Microsoft Graph を使用して、アプリの API アクセス許可を付与または取り消すことができます。 この方法は 、対話型の管理者の同意 を回避し、自動化や一括管理に役立ちます。

アプリケーションのアクセス許可は、 アプリ ロール または 直接アクセス許可とも呼ばれ、アプリが独自の ID を使用して API を呼び出すようにします。 アプリ ロールを付与または取り消すには、次の手順に従います。

注意

ご注意ください。 プログラムによって付与されたアクセス許可は、確認または確認の対象ではなく、直ちに有効になります。

前提条件

これらの手順を完了するには、次のものが必要です。

  • Microsoft Entra テナント。
  • 委任されたコンテキストでこの記事の要求を実行するには。 次の手順を実行します。
    • Graph エクスプローラー などの API クライアントに、テナントにアプリケーションを作成する権限を持つユーザーとしてサインインします。 アクセス許可付与を作成する権限は、管理者が構成した アプリの同意ポリシーを使用して、テナントで制限または制御できます。
    • サインインしているアプリで、サインインしているユーザーの Application.Read.AllAppRoleAssignment.ReadWrite.All 委任されたアクセス許可に同意します。 organizationに代わって同意する必要はありません。
  • アプリ ロールを付与するクライアント サービス プリンシパルのオブジェクト ID を取得します。 この記事では、クライアント サービス プリンシパルは ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94で識別されます。 Microsoft Entra 管理センターで、[Identity>Applications>Enterprise アプリケーション>App アプリケーション] を展開して、クライアント サービス プリンシパルを検索します。 それを選択し、[ 概要 ] ページで [オブジェクト ID] の値をコピーします。

注意

AppRoleAssignment.ReadWrite.All アクセス許可が付与されているアプリには、適切なユーザーのみがアクセスする必要があります。

手順 1: リソース サービス プリンシパルのアプリ ロールを取得する

まず、リソース サービス プリンシパルによって公開されているアプリ ロールを見つけます。 アプリ ロールは、サービス プリンシパルの appRoles オブジェクトで定義されます。 この記事では、テナント内の Microsoft Graph サービス プリンシパルをリソース サービス プリンシパルとして使用します。

要求

次の要求は、テナント内の Microsoft Graph サービス プリンシパルによって定義されたアプリ ロールを取得します。

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,appRoles

応答

次の例は応答を示しています。

注: ここに示す応答オブジェクトは、読みやすさのために短縮されている場合があります。

HTTP/1.1 201 Created
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id,displayName,appId,appRoles)",
    "value": [
        {
            "id": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "displayName": "Microsoft Graph",
            "appId": "00000003-0000-0000-c000-000000000000",
            "appRoles": [
                {
                    "allowedMemberTypes": [
                        "Application"
                    ],
                    "description": "Allows the app to read user profiles without a signed in user.",
                    "displayName": "Read all users' full profiles",
                    "id": "df021288-bdef-4463-88db-98f22de89214",
                    "isEnabled": true,
                    "origin": "Application",
                    "value": "User.Read.All"
                }
            ]
        }
    ]
}

手順 2: クライアント サービス プリンシパルにアプリ ロールを付与する

この手順では、Microsoft Graph によって公開されるアプリ ロールをアプリに付与し、アプリ ロールの割り当てを行います。 手順 1 から、Microsoft Graph のオブジェクト ID が 7ea9e944-71ce-443d-811c-71e8047b557aされ、アプリ ロール User.Read.All は ID df021288-bdef-4463-88db-98f22de89214によって識別されます。

要求

次の要求は、クライアント アプリ (ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94のプリンシパル) に、ID 7ea9e944-71ce-443d-811c-71e8047b557aのリソース サービス プリンシパルによって公開される ID df021288-bdef-4463-88db-98f22de89214のアプリ ロールを付与します。

注:

Python SDK を使用する場合は、次のライブラリをインポートします。

from msgraph.generated.models.app_role_assignment import AppRoleAssignment
from msgraph.generated.models.service_principal import ServicePrincipal
POST https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo
Content-Type: application/json

{
    "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "appRoleId": "df021288-bdef-4463-88db-98f22de89214"
}

応答

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('7ea9e944-71ce-443d-811c-71e8047b557a')/appRoleAssignedTo/$entity",
    "id": "47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M",
    "deletedDateTime": null,
    "appRoleId": "df021288-bdef-4463-88db-98f22de89214",
    "createdDateTime": "2022-05-18T15:37:21.8215423Z",
    "principalDisplayName": "My application",
    "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "principalType": "ServicePrincipal",
    "resourceDisplayName": "Microsoft Graph",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a"
}

アプリ ロールの割り当てを確認する

次の要求を実行して、リソース サービス プリンシパルにロールが割り当てられているプリンシパルを確認します。

要求

GET https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo

応答

応答オブジェクトには、リソース サービス プリンシパルへのアプリ ロールの割り当てのコレクションが含まれており、前の要求で作成したアプリ ロールの割り当てが含まれています。

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('7ea9e944-71ce-443d-811c-71e8047b557a')/appRoleAssignedTo",
    "value": [
        {
            "id": "47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M",
            "deletedDateTime": null,
            "appRoleId": "df021288-bdef-4463-88db-98f22de89214",
            "createdDateTime": "2022-05-18T15:37:21.8997216Z",
            "principalDisplayName": "My application",
            "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
            "principalType": "ServicePrincipal",
            "resourceDisplayName": "Microsoft Graph",
            "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a"
        }
    ]
}

手順 3: クライアント サービス プリンシパルからアプリ ロールの割り当てを取り消す

要求

DELETE https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo/47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M

応答

HTTP/1.1 204 No Content

委任されたアクセス許可 ( アプリ ロール または OAuth2 アクセス許可とも呼ばれます) では、アプリがサインインしているユーザーの代わりに API を呼び出します。 委任されたアクセス許可を付与または取り消すには、次の手順に従います。

注意

ご注意ください。 プログラムによって付与されたアクセス許可は、レビューまたは確認の対象になりません。 すぐに有効になります。

前提条件

これらの手順を完了するには、次のものが必要です。

  • 有効なMicrosoft Entra テナント。
  • この記事の要求をユーザーとして実行するには。 次の手順を実行します。
    • Cloud Application Administrator Microsoft Entra ロールを持つユーザーとして Graph エクスプローラー などの API クライアントにサインインします。 このロールは、アプリケーションを作成し、テナント内の委任されたアクセス許可に同意を付与するための最小特権ロールです。 アクセス許可付与を作成する権限は、管理者が構成した アプリの同意ポリシーを使用して、テナントで制限または制御できます。
    • サインインしているアプリで、サインインしているユーザーの Application.Read.AllDelegatedPermissionGrant.ReadWrite.All 委任されたアクセス許可に同意します。 organizationに代わって同意する必要はありません。
    • ユーザーに代わって委任されたアクセス許可を付与するクライアント サービス プリンシパルのオブジェクト ID を取得します。 この記事では、クライアント サービス プリンシパルは ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94で識別されます。 Microsoft Entra 管理センターで、[Identity>Applications>Enterprise アプリケーション>App アプリケーション] を展開して、クライアント サービス プリンシパルを検索します。 それを選択し、[ 概要 ] ページで [オブジェクト ID] の値をコピーします。

注意

DelegatedPermissionGrant.ReadWrite.All アクセス許可が付与されているアプリには、適切なユーザーのみがアクセスする必要があります。

手順 1: リソース サービス プリンシパルの委任されたアクセス許可を取得する

まず、リソース サービス プリンシパルによって公開される委任されたアクセス許可を見つけます。 委任されたアクセス許可は、サービス プリンシパルの oauth2PermissionScopes オブジェクトで定義されます。 この記事では、テナント内の Microsoft Graph サービス プリンシパルをリソース サービス プリンシパルとして使用します。

要求

この要求は、テナント内の Microsoft Graph サービス プリンシパルによって定義された委任されたアクセス許可を取得します。

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes

応答

次の例は応答を示しています。

注: ここに示す応答オブジェクトは、読みやすさのために短縮されている場合があります。

HTTP/1.1 201 Created
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id,displayName,appId,oauth2PermissionScopes)",
    "value": [
        {
            "id": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "displayName": "Microsoft Graph",
            "appId": "00000003-0000-0000-c000-000000000000",
            "oauth2PermissionScopes": [
                {
                    "adminConsentDescription": "Allows the app to read the full set of profile properties, reports, and managers of other users in your organization, on behalf of the signed-in user.",
                    "adminConsentDisplayName": "Read all users' full profiles",
                    "id": "a154be20-db9c-4678-8ab7-66f6cc099a59",
                    "isEnabled": true,
                    "type": "Admin",
                    "userConsentDescription": "Allows the app to read the full set of profile properties, reports, and managers of other users in your organization, on your behalf.",
                    "userConsentDisplayName": "Read all users' full profiles",
                    "value": "User.Read.All"
                },
                {
                    "adminConsentDescription": "Allows the app to list groups, and to read their properties and all group memberships on behalf of the signed-in user.  Also allows the app to read calendar, conversations, files, and other group content for all groups the signed-in user can access. ",
                    "adminConsentDisplayName": "Read all groups",
                    "id": "5f8c59db-677d-491f-a6b8-5f174b11ec1d",
                    "isEnabled": true,
                    "type": "Admin",
                    "userConsentDescription": "Allows the app to list groups, and to read their properties and all group memberships on your behalf.  Also allows the app to read calendar, conversations, files, and other group content for all groups you can access.  ",
                    "userConsentDisplayName": "Read all groups",
                    "value": "Group.Read.All"
                }                
            ]
        }
    ]
}

手順 2: ユーザーに代わってクライアント サービス プリンシパルに委任されたアクセス許可を付与する

要求

この手順では、ユーザーの代わりに Microsoft Graph によって公開されるアプリの委任されたアクセス許可を付与すると、 委任されたアクセス許可が付与されます。

  • 手順 1 から、テナント内の Microsoft Graph のオブジェクト ID は、 7ea9e944-71ce-443d-811c-71e8047b557a
  • 委任されたアクセス許可 User.Read.AllGroup.Read.All は、それぞれグローバルに一意の ID a154be20-db9c-4678-8ab7-66f6cc099a595f8c59db-677d-491f-a6b8-5f174b11ec1d によって識別されます。
  • プリンシパルは、ID 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5によって識別されるユーザーです。
  • クライアント サービス プリンシパルは ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94によって識別されます。 これはサービス プリンシパルのオブジェクト ID であり、appIdではありません
POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
Content-Type: application/json

{
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "Principal",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
    "scope": "User.Read.All Group.Read.All"
}

上記の要求は、1 人のユーザーに代わって同意を付与しますが、テナント内のすべてのユーザーに代わって同意を付与することもできます。 要求本文は、次の変更を除き、前の要求本文と似ています。

  • consentTypeAllPrincipalsされ、テナント内のすべてのユーザーに代わって同意していることを示します。
  • principalId プロパティが指定されていないか、nullできます。

すべてのユーザーに代わって同意を付与するための要求本文の例を次に示します。

POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
Content-Type: application/json

{
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "AllPrincipals",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "scope": "User.Read.All Group.Read.All"
}

応答

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#oauth2PermissionGrants/$entity",
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "Principal",
    "id": "47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl",
    "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "scope": "User.Read.All Group.Read.All"
}

テナント内のすべてのユーザーに同意を付与した場合、応答オブジェクトの consentTypeAllPrincipalsされ、 principalIdnullされます。

アクセス許可の付与を確認する

次の要求を実行して、リソース サービス プリンシパルに委任されたアクセス許可を持つプリンシパルを確認します。

要求

GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94' and principalId eq '3fbd929d-8c56-4462-851e-0eb9a7b3a2a5' and consentType eq 'Principal'

応答

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#oauth2PermissionGrants",
    "value": [
        {
            "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
            "consentType": "Principal",
            "id": "47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl",
            "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
            "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "scope": "User.Read.All Group.Read.All"
        }
    ]
}

手順 3: ユーザーに代わってサービス プリンシパルに付与された委任されたアクセス許可を取り消す [省略可能]

サービス プリンシパルに、ユーザーに代わって複数の委任されたアクセス許可許可が付与されている場合は、特定の許可またはすべての許可を取り消すことができます。 クライアント サービス プリンシパルに割り当てた委任されたアクセス許可の同意を削除および取り消すには、このメソッドを使用します。

  • 1 つ以上の許可を取り消すには、oauth2PermissionGrant オブジェクトに対して PATCH 要求を実行し、 スコープ パラメーターに保持する委任されたアクセス許可のみを指定します。
  • すべての許可を取り消すには、oauth2PermissionGrant オブジェクトに DELETE 要求を送信します。

要求

この要求は、 User.Read.All アクセス許可付与を除くすべてのアクセス許可許可を取り消します。 アクセス許可が削除され、以前に付与された同意が取り消されます。

PATCH https://graph.microsoft.com/v1.0/oauth2PermissionGrants/47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl
Content-Type: application/json

{
    "scope": "User.Read.All"
}

応答

HTTP/1.1 204 No Content

要求

この要求は、ユーザーに代わってサービス プリンシパルに対するすべてのアクセス許可許可を取り消します。

DELETE https://graph.microsoft.com/v1.0/oauth2PermissionGrants/47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl

応答

HTTP/1.1 204 No Content