Erteilen der Einwilligung im Namen eines einzelnen Benutzers mithilfe von PowerShell

In diesem Artikel erfahren Sie, wie Sie die Einwilligung im Namen eines einzelnen Benutzers mithilfe von PowerShell erteilen.

Wenn ein Benutzer die Einwilligung für sich selbst erteilt, treten folgende Ereignisse häufiger auf:

  1. Ein Dienstprinzipal für die Clientanwendung wird erstellt (sofern noch nicht vorhanden). Ein Dienstprinzipal ist die Instanz einer Anwendung oder eines Diensts in Ihrem Microsoft Entra-Mandanten. Der Zugriff, der der App oder dem Dienst gewährt wird, ist diesem Dienstprinzipalobjekt zugeordnet.

  2. Für jede API, auf die die Anwendung Zugriff benötigt, wird eine delegierte Berechtigung für diese API für die Berechtigungen erstellt, die die Anwendung benötigt. Der Zugriff wird im Namen des Benutzers gewährt. Eine delegierte Berechtigungserteilung autorisiert eine Anwendung, im Namen eines Nutzers auf eine API zuzugreifen, wenn sich dieser Benutzer anmeldet.

  3. Dem Benutzer wird die Clientanwendung zugewiesen. Durch das Zuweisen der Anwendung zum Benutzer wird sichergestellt, dass die Anwendung im Portal Meine Apps für diesen Benutzer aufgeführt wird. Der Benutzer kann den in seinem Namen gewährten Zugriff in seinem My Apps-Portal überprüfen und widerrufen.

Voraussetzungen

Um die Einwilligung für eine Anwendung im Namen eines Benutzers zu erteilen, ist Folgendes erforderlich:

  • Ein Benutzerkonto als „Globaler Administrator“, „Anwendungsadministrator“ oder „Cloudanwendungsadministrator“.

Bevor Sie beginnen, notieren Sie die folgenden Details aus dem Microsoft Entra Admin Center:

  • Die App-ID für die App, der Sie Einwilligung erteilen. Für die Zwecke dieses Artikels nennen wir sie die Client-Anwendung.
  • Die API-Berechtigungen, die die Client-Anwendung benötigt. Ermitteln Sie die App-ID der API und die Berechtigungs-IDs oder Anspruchswerte.
  • Der Nutzername oder die Objekt-ID für den Nutzer, in dessen Namen der Zugriff gewährt wird.

In diesem Beispiel wird Microsoft Graph PowerShell verwendet, um die Einwilligung im Namen eines einzelnen Benutzers zu erteilen. Die Clientanwendung ist Microsoft Graph Explorer, und es wird Zugriff auf die Microsoft Graph-API gewährt.

Um einer Anwendung im Namen eines Benutzers mit Microsoft Graph PowerShell die Zustimmung zu erteilen, müssen Sie sich mindestens als Cloudanwendungsadministrator anmelden.

# The app for which consent is being granted. In this example, we're granting access
# to Microsoft Graph Explorer, an application published by Microsoft.
$clientAppId = "de8bc8b5-d9f9-48b1-a8ad-b748da725064" # Microsoft Graph Explorer

# The API to which access will be granted. Microsoft Graph Explorer makes API 
# requests to the Microsoft Graph API, so we'll use that here.
$resourceAppId = "00000003-0000-0000-c000-000000000000" # Microsoft Graph API

# The permissions to grant. Here we're including "openid", "profile", "User.Read"
# and "offline_access" (for basic sign-in), as well as "User.ReadBasic.All" (for 
# reading other users' basic profile).
$permissions = @("openid", "profile", "offline_access", "User.Read", "User.ReadBasic.All")

# The user on behalf of whom access will be granted. The app will be able to access 
# the API on behalf of this user.
$userUpnOrId = "user@example.com"

# Step 0. Connect to Microsoft Graph PowerShell. We need User.ReadBasic.All to get
#    users' IDs, Application.ReadWrite.All to list and create service principals, 
#    DelegatedPermissionGrant.ReadWrite.All to create delegated permission grants, 
#    and AppRoleAssignment.ReadWrite.All to assign an app role.
#    WARNING: These are high-privilege permissions!
Connect-MgGraph -Scopes ("User.ReadBasic.All Application.ReadWrite.All " `
                        + "DelegatedPermissionGrant.ReadWrite.All " `
                        + "AppRoleAssignment.ReadWrite.All")

# Step 1. Check if a service principal exists for the client application. 
#     If one doesn't exist, create it.
$clientSp = Get-MgServicePrincipal -Filter "appId eq '$($clientAppId)'"
if (-not $clientSp) {
   $clientSp = New-MgServicePrincipal -AppId $clientAppId
}

# Step 2. Create a delegated permission that grants the client app access to the
#     API, on behalf of the user. (This example assumes that an existing delegated 
#     permission grant does not already exist, in which case it would be necessary 
#     to update the existing grant, rather than create a new one.)
$user = Get-MgUser -UserId $userUpnOrId
$resourceSp = Get-MgServicePrincipal -Filter "appId eq '$($resourceAppId)'"
$scopeToGrant = $permissions -join " "
$grant = New-MgOauth2PermissionGrant -ResourceId $resourceSp.Id `
                                     -Scope $scopeToGrant `
                                     -ClientId $clientSp.Id `
                                     -ConsentType "Principal" `
                                     -PrincipalId $user.Id

# Step 3. Assign the app to the user. This ensures that the user can sign in if assignment
#     is required, and ensures that the app shows up under the user's My Apps portal.
if ($clientSp.AppRoles | ? { $_.AllowedMemberTypes -contains "User" }) {
    Write-Warning ("A default app role assignment cannot be created because the " `
                 + "client application exposes user-assignable app roles. You must " `
                 + "assign the user a specific app role for the app to be listed " `
                 + "in the user's My Apps access panel.")
} else {
    # The app role ID 00000000-0000-0000-0000-000000000000 is the default app role
    # indicating that the app is assigned to the user, but not for any specific 
    # app role.
    $assignment = New-MgServicePrincipalAppRoleAssignedTo `
          -ServicePrincipalId $clientSp.Id `
          -ResourceId $clientSp.Id `
          -PrincipalId $user.Id `
          -AppRoleId "00000000-0000-0000-0000-000000000000"
}

Um einer Anwendung im Namen eines Benutzers die Zustimmung zur Verwendung der Microsoft Graph API zu erteilen, melden Sie sich bei Graph-Explorer mindestens als Cloudanwendungsadministrator an.

Sie müssen den folgenden Berechtigungen zustimmen:

Application.ReadWrite.All, Directory.ReadWrite.All, DelegatedPermissionGrant.ReadWrite.All.

Im folgenden Beispiel erteilen Sie einer Clientunternehmensanwendung im Namen eines einzelnen Benutzers delegierte Berechtigungen, die von einer Ressourcen-API definiert wurden.

In diesem Beispiel ist die Ressourcenunternehmensanwendung Microsoft Graph mit der Objekt-ID 7ea9e944-71ce-443d-811c-71e8047b557a. Die Microsoft Graph-Anwendung definiert die delegierten Berechtigungen User.Read.All und Group.Read.All. Der Einwilligungstyp (consentType) ist Principal. Damit geben Sie an, dass Sie die Einwilligung im Namen eines einzelnen Benutzers im Mandanten erteilen. Die Objekt-ID der Clientunternehmensanwendung lautet b0d9b9e3-0ecf-4bfd-8dab-9273dd055a941. Die Prinzipal-ID (principalId) des Benutzers ist 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.

Achtung

Vorsicht ist geboten! Programmgesteuert erteilte Berechtigungen unterliegen keiner Überprüfung oder Bestätigung. Sie treten sofort in Kraft.

  1. Rufen Sie alle delegierten Berechtigungen ab, die von Microsoft Graph (der Ressourcenanwendung) in Ihrer Mandantenanwendung definiert wurden. Identifizieren Sie die delegierten Berechtigungen, die Sie der Clientanwendung erteilen wollen. In diesem Beispiel lauten die delegierten Berechtigungen User.Read.All und Group.Read.All.

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
    
  2. Erteilen Sie der Clientunternehmensanwendung im Namen des Benutzers die delegierten Berechtigungen, indem Sie die folgende Anforderung ausführen:

    POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
    
    Request body
    {
       "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"
    }
    
  3. Vergewissern Sie sich, dass Sie dem Benutzer die Einwilligung erteilt haben, indem Sie die folgende Anforderung ausführen:

    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94' and consentType eq 'Principal'
    
  4. Weisen Sie dem Benutzer die App zu. Durch diese Zuweisung wird sichergestellt, dass sich der Benutzer anmelden kann, wenn eine Zuweisung erforderlich ist, und es wird gewährleistet, dass die App über das Portal „Meine Apps“ des Benutzers verfügbar ist. Im folgenden Beispiel stellt resourceId die Client-App dar, der der Benutzer zugewiesen wird. Dem Benutzer wird die Standard-App-Rolle (00000000-0000-0000-0000-000000000000) zugewiesen.

        POST /servicePrincipals/resource-servicePrincipal-id/appRoleAssignedTo
    
        {
        "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
        "resourceId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
        "appRoleId": "00000000-0000-0000-0000-000000000000"
        }
    

Nächste Schritte