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

Microsoft Entra IDでクライアント アプリに API アクセス許可を付与すると、アクセス許可は、データと同様にアクセス、更新、または削除できるオブジェクトとして記録されます。 Microsoft Graph を使用してアクセス許可許可を直接作成することは、対話型の同意に代わるプログラムによる代替手段であり、organizationでの自動化シナリオ、一括管理、またはその他のカスタム操作に役立ちます。

このガイドでは、Microsoft Graph を使用してアプリのアプリ ロールを付与および取り消す方法について説明します。 アプリ ロールは、 アプリケーションのアクセス許可または 直接アクセス許可とも呼ばれ、アプリが独自の ID で API を呼び出すことを許可します。

注意

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

前提条件

これらの手順を完了するには、次のリソースと特権が必要です。

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

注意

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

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

アプリ ロールを付与するには、まず、付与するアプリ ロールと、アプリ ロールを公開するリソース サービス プリンシパルを特定する必要があります。 アプリ ロールは、サービス プリンシパルの 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 のリソース サービス プリンシパルによって公開される ID df021288-bdef-4463-88db-98f22de89214 のアプリ ロールを許可します 7ea9e944-71ce-443d-811c-71e8047b557a

注:

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

応答

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

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

まとめ

サービス プリンシパルのアプリ ロールの許可を管理する方法について説明しました。 Microsoft Graph を使用してアクセス許可を付与するこの方法は、 別の対話型の同意 であり、注意して使用する必要があります。

このガイドでは、Microsoft Graph を使用してアプリの委任されたアクセス許可を付与および取り消す方法について説明します。 委任されたアクセス許可 ( スコープ または OAuth2 アクセス許可とも呼ばれます) では、アプリがサインインしているユーザーの代わりに API を呼び出すことを許可します。

注意

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

前提条件

これらの手順を完了するには、次のリソースと特権が必要です。

  • 作業Microsoft Entraテナント。
  • この記事の要求は、ユーザーとして実行します。 次の手順を完了する必要があります。
    • Graph エクスプローラー などの API クライアントに、テナントにアプリケーションを作成する権限を持つユーザーとしてサインインします。
    • サインインしたアプリで、サインインしているユーザーに代わって Application.Read.AllDelegatedPermissionGrant.ReadWrite.All 委任されたアクセス許可に同意します。 organizationに代わって同意する必要はありません。
    • ユーザーに代わって委任されたアクセス許可を付与するクライアント サービス プリンシパルのオブジェクト ID を取得します。 この記事では、クライアント サービス プリンシパルは ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94で識別されます。

注意

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 は、それぞれグローバルに一意の a154be20-db9c-4678-8ab7-66f6cc099a595f8c59db-677d-491f-a6b8-5f174b11ec1d ID によって識別されます。
  • プリンシパルは、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 人のユーザーに代わって同意を付与しますが、テナント内のすべてのユーザーに代わって同意を付与することを選択できます。 要求本文は、次の変更を除き、前の要求本文と似ています。

  • consentType は、AllPrincipalsテナント内のすべてのユーザーに代わって同意していることを示します。
  • 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になります。 principalId は になります null

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

ユーザーの代わりにサービス プリンシパルに割り当てられた委任されたアクセス許可を確認するには、次の要求を実行します。

要求

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: ユーザーの代わりにサービス プリンシパルに付与された委任されたアクセス許可を取り消す [省略可能]

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

  • 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

まとめ

サービス プリンシパルに委任されたアクセス許可 (またはスコープ) を付与しました。 Microsoft Graph を使用してアクセス許可を付与するこの方法は、 対話型の同意 の代替手段であり、注意して使用する必要があります。