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

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

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

注意

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

前提条件

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

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

応答

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

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 テナント。
  • この記事の要求は、ユーザーとして実行します。 次の手順を完了する必要があります。
    • Cloud Application Administrator Microsoft Entra ロールを持つユーザーとして Graph Explorer などの API クライアントにサインインします。これは、アプリケーションを作成し、テナントで委任されたアクセス許可に同意するための最小特権ロールです。 アクセス許可付与を作成する権限は、管理者が構成した アプリの同意ポリシーを使用してテナントで制限または制御される場合があります。
    • サインインしているアプリで、サインインしているユーザーに代わって Application.Read.AllDelegatedPermissionGrant.ReadWrite.All 委任されたアクセス許可に同意します。 組織に代わって同意する必要はありません。
    • ユーザーに代わって委任されたアクセス許可を付与するクライアント サービス プリンシパルのオブジェクト ID を取得します。 この記事では、クライアント サービス プリンシパルは ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94で識別されます。 Microsoft Entra 管理センターで、[ ID ] メニュー > の [ アプリケーション> ] を展開し、[ エンタープライズ アプリケーション]>[アプリ アプリケーション ] を選択してクライアント サービス プリンシパルを見つけます。 それを選択し、[ 概要 ] ページで [オブジェクト 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 は、それぞれグローバルに一意の 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: ユーザーの代わりにサービス プリンシパルに付与された委任されたアクセス許可を取り消す [省略可能]

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

  • 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 を使用してアクセス許可を付与するこの方法は、 対話型の同意 の代替手段であり、注意して使用する必要があります。