Freigeben über


Programmgesteuertes Erteilen oder Widerrufen von API-Berechtigungen

Das Erteilen von API-Berechtigungen für eine Client-App in Microsoft Entra ID zeichnet die gewährten Berechtigungen als Objekte auf, die Sie lesen, aktualisieren oder löschen, wie alle anderen Daten. Sie können Microsoft Graph verwenden, um API-Berechtigungen für eine App zu erteilen oder zu widerrufen. Diese Methode vermeidet die interaktive Administratoreinwilligung und ist für die Automatisierung oder Massenverwaltung nützlich.

Mithilfe von Anwendungsberechtigungen, die auch als App-Rollen oder Direktzugriffsberechtigungen bezeichnet werden, kann eine App eine API mit ihrer eigenen Identität aufrufen. Führen Sie die folgenden Schritte aus, um App-Rollen zu gewähren oder zu widerrufen.

Achtung

Gehen Sie hierbei vorsichtig vor. Berechtigungen, die programmgesteuert gewährt werden, unterliegen keiner Überprüfung oder Bestätigung und werden sofort wirksam.

Voraussetzungen

Um diese Anweisungen ausführen zu können, benötigen Sie Folgendes:

  • Ein Microsoft Entra Mandant.
  • So führen Sie die Anforderungen in diesem Artikel in einem delegierten Kontext aus. Führen Sie die folgenden Schritte aus:
    • Melden Sie sich bei einem API-Client wie Graph Explorer als Benutzer mit Berechtigungen zum Erstellen von Anwendungen im Mandanten an. Die Berechtigungen zum Erstellen von Berechtigungserteilungen können in Ihrem Mandanten durch vom Administrator konfigurierte App-Zustimmungsrichtlinien eingeschränkt oder gesteuert werden.
    • Stimmen Sie in der App, bei der Sie angemeldet sind, den delegierten Berechtigungen Application.Read.All und AppRoleAssignment.ReadWrite.All für den angemeldeten Benutzer zu. Sie müssen nicht im Namen Ihrer organization zustimmen.
  • Rufen Sie die Objekt-ID des Clientdienstprinzipals ab, dem Sie App-Rollen gewähren. In diesem Artikel wird der Clientdienstprinzipal durch die ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94identifiziert. Erweitern Sie im Microsoft Entra Admin Center Identitätsanwendungen>>Unternehmensanwendungen>App-Anwendungen, um den Clientdienstprinzipal zu finden. Wählen Sie ihn aus, und kopieren Sie auf der Seite Übersicht den Wert der Objekt-ID.

Achtung

Nur geeignete Benutzer sollten auf Apps zugreifen, die die Berechtigung AppRoleAssignment.ReadWrite.All erhalten.

Schritt 1: Abrufen der App-Rollen des Ressourcendienstprinzipals

Suchen Sie zunächst nach den App-Rollen, die vom Ressourcendienstprinzipal verfügbar gemacht werden. App-Rollen werden im appRoles-Objekt des Dienstprinzipals definiert. In diesem Artikel wird der Microsoft Graph-Dienstprinzipal in Ihrem Mandanten als Ressourcendienstprinzipal verwendet.

Anforderung

Die folgende Anforderung ruft die App-Rollen ab, die vom Microsoft Graph-Dienstprinzipal im Mandanten definiert sind.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'&$select=id,displayName,appId,appRoles

Antwort

Das folgende Beispiel zeigt die Antwort.

Hinweis: Das hier gezeigte Antwortobjekt kann zur besseren Lesbarkeit gekürzt werden.

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"
                }
            ]
        }
    ]
}

Schritt 2: Gewähren einer App-Rolle für einen Clientdienstprinzipal

Weisen Sie Ihrer App in diesem Schritt eine App-Rolle zu, die von Microsoft Graph verfügbar gemacht wird, was zu einer App-Rollenzuweisung führt. In Schritt 1 lautet 7ea9e944-71ce-443d-811c-71e8047b557adie Objekt-ID von Microsoft Graph , und die App-Rolle User.Read.All wird durch die ID df021288-bdef-4463-88db-98f22de89214identifiziert.

Anforderung

Die folgende Anforderung gewährt Ihrer Client-App (dem Prinzipal der ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94) eine App-Rolle der ID df021288-bdef-4463-88db-98f22de89214 , die von einem Ressourcendienstprinzipal der ID 7ea9e944-71ce-443d-811c-71e8047b557averfügbar gemacht wird.

Hinweis

Wenn Sie das Python SDK verwenden, importieren Sie die folgenden Bibliotheken:

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"
}

Antwort

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"
}

Bestätigen der App-Rollenzuweisung

Überprüfen Sie die Prinzipale mit Rollenzuweisungen an den Ressourcendienstprinzipal, indem Sie die folgende Anforderung ausführen.

Anforderung

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

Antwort

Das Antwortobjekt enthält eine Sammlung von App-Rollenzuweisungen für Ihren Ressourcendienstprinzipal und die App-Rollenzuweisung, die Sie in der vorherigen Anforderung erstellt haben.

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"
        }
    ]
}

Schritt 3: Widerrufen einer App-Rollenzuweisung für einen Clientdienstprinzipal

Anforderung

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

Antwort

HTTP/1.1 204 No Content

Delegierte Berechtigungen, auch als App-Rollen oder OAuth2-Berechtigungen bezeichnet, ermöglichen es einer App, eine API im Namen eines angemeldeten Benutzers aufzurufen. Führen Sie die folgenden Schritte aus, um delegierte Berechtigungen zu erteilen oder zu widerrufen.

Achtung

Gehen Sie hierbei vorsichtig vor. Berechtigungen, die programmgesteuert gewährt werden, unterliegen keiner Überprüfung oder Bestätigung. Sie treten sofort in Kraft.

Voraussetzungen

Um diese Anweisungen ausführen zu können, benötigen Sie Folgendes:

  • Ein gültiger Microsoft Entra Mandant.
  • So führen Sie die Anforderungen in diesem Artikel als Benutzer aus. Führen Sie die folgenden Schritte aus:
    • Melden Sie sich bei einem API-Client wie Graph Explorer als Benutzer mit der Rolle Cloudanwendungsadministrator Microsoft Entra an. Diese Rolle ist die Rolle mit den geringsten Berechtigungen zum Erstellen von Anwendungen und Erteilen der Zustimmung zu delegierten Berechtigungen im Mandanten. Die Berechtigungen zum Erstellen von Berechtigungserteilungen können in Ihrem Mandanten durch vom Administrator konfigurierte App-Zustimmungsrichtlinien eingeschränkt oder gesteuert werden.
    • Stimmen Sie in der App, bei der Sie angemeldet sind, den delegierten Berechtigungen Application.Read.All und DelegatedPermissionGrant.ReadWrite.All für den angemeldeten Benutzer zu. Sie müssen nicht im Namen Ihrer organization zustimmen.
    • Rufen Sie die Objekt-ID des Clientdienstprinzipals ab, dem Sie delegierte Berechtigungen im Namen eines Benutzers erteilen. In diesem Artikel wird der Clientdienstprinzipal durch die ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94identifiziert. Erweitern Sie im Microsoft Entra Admin Center Identitätsanwendungen>>Unternehmensanwendungen>App-Anwendungen, um den Clientdienstprinzipal zu finden. Wählen Sie ihn aus, und kopieren Sie auf der Seite Übersicht den Wert der Objekt-ID.

Achtung

Nur geeignete Benutzer sollten auf Apps zugreifen, die die Berechtigung DelegatedPermissionGrant.ReadWrite.All erhalten.

Schritt 1: Abrufen delegierter Berechtigungen für den Ressourcendienstprinzipal

Suchen Sie zunächst nach den delegierten Berechtigungen, die vom Ressourcendienstprinzipal verfügbar gemacht werden. Delegierte Berechtigungen werden im oauth2PermissionScopes-Objekt des Dienstprinzipals definiert. In diesem Artikel wird der Microsoft Graph-Dienstprinzipal in Ihrem Mandanten als Ressourcendienstprinzipal verwendet.

Anforderung

Diese Anforderung ruft die delegierten Berechtigungen ab, die vom Microsoft Graph-Dienstprinzipal im Mandanten definiert sind.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'&$select=id,displayName,appId,oauth2PermissionScopes

Antwort

Das folgende Beispiel zeigt die Antwort.

Hinweis: Das hier gezeigte Antwortobjekt kann zur besseren Lesbarkeit gekürzt werden.

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"
                }                
            ]
        }
    ]
}

Schritt 2: Erteilen einer delegierten Berechtigung für den Clientdienstprinzipal im Namen eines Benutzers

Anforderung

In diesem Schritt erteilen Sie Ihrer App delegierte Berechtigung, die von Microsoft Graph im Namen eines Benutzers verfügbar gemacht wird, was zu einer delegierten Berechtigungserteilung führt.

  • Ab Schritt 1 lautet die Objekt-ID von Microsoft Graph im Mandanten. 7ea9e944-71ce-443d-811c-71e8047b557a
  • Die delegierten Berechtigungen User.Read.All und Group.Read.All werden durch die global eindeutigen IDs a154be20-db9c-4678-8ab7-66f6cc099a59 bzw 5f8c59db-677d-491f-a6b8-5f174b11ec1d . identifiziert.
  • Der Prinzipal ist ein Benutzer, der durch die ID 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5identifiziert wird.
  • Der Clientdienstprinzipal wird durch die ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94identifiziert. Dies ist die Objekt-ID des Dienstprinzipals und nicht seine 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"
}

Die vorherige Anforderung erteilt die Zustimmung im Namen eines einzelnen Benutzers, Aber Sie können auch die Zustimmung im Namen aller Benutzer im Mandanten erteilen. Der Anforderungstext ähnelt dem vorherigen Anforderungstext, mit Ausnahme der folgenden Änderungen:

  • ConsentType ist AllPrincipals, was angibt, dass Sie im Namen aller Benutzer im Mandanten zustimmen.
  • Die principalId-Eigenschaft wird nicht angegeben oder kann sein null.

Hier sehen Sie ein Beispiel für einen Anforderungstext für die Erteilung der Zustimmung im Namen aller Benutzer:

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"
}

Antwort

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"
}

Wenn Sie die Zustimmung für alle Benutzer im Mandanten erteilt haben, wäre AllPrincipalsder consentType im Antwortobjekt , und die principalId wäre null.

Bestätigen der Berechtigungserteilung

Überprüfen Sie die Prinzipale mit delegierten Berechtigungen für den Ressourcendienstprinzipal, indem Sie die folgende Anforderung ausführen.

Anforderung

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'

Antwort

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"
        }
    ]
}

Aktualisieren der Berechtigungserteilung

Um dem Ressourcendienstprinzipal für den Benutzer weitere Berechtigungen hinzuzufügen oder einige Berechtigungen für den Client zu entfernen, aktualisieren Sie das oauth2PermissionGrant-Objekt , wie in der folgenden Anforderung gezeigt. Die Anforderung gibt eine 204 No Content Antwort zurück.

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

{
    "scope": "openid profile offline_access DelegatedPermissionGrant.ReadWrite.All AccessReview.ReadWrite.All AgentIdentityBlueprint.ReadWrite.All"
}

Schritt 3: Widerrufen delegierter Berechtigungen, die einem Dienstprinzipal im Namen eines Benutzers erteilt wurden [optional]

Wenn einem Dienstprinzipal mehrere delegierte Berechtigungserteilungen im Namen eines Benutzers gewährt wurden, können Sie entweder bestimmte Oder alle Zuweisungen widerrufen. Verwenden Sie diese Methode, um die Zustimmung für die delegierten Berechtigungen zu entfernen und zu widerrufen, die Sie dem Clientdienstprinzipal zugewiesen haben.

  • Um eine oder mehrere Berechtigungen zu widerrufen, führen Sie eine PATCH-Anforderung für das oauth2PermissionGrant-Objekt aus, und geben Sie nur die delegierten Berechtigungen an, die im Scope-Parameter beibehalten werden sollen.
  • Um alle Berechtigungen zu widerrufen, senden Sie eine DELETE-Anforderung an das oauth2PermissionGrant-Objekt.

Anforderung

Diese Anforderung widerruft alle Berechtigungserteilungen mit Ausnahme der User.Read.All Berechtigungsgewährung. Es entfernt die Berechtigungen und widerruft die zuvor erteilte Zustimmung.

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

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

Antwort

HTTP/1.1 204 No Content

Anforderung

Diese Anforderung widerruft alle Berechtigungserteilungen für einen Dienstprinzipal im Namen eines Benutzers.

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

Antwort

HTTP/1.1 204 No Content