Toestemming verlenen namens één gebruiker met behulp van PowerShell

In dit artikel leert u hoe u toestemming verleent namens één gebruiker met behulp van PowerShell.

Wanneer een gebruiker zelf toestemming verleent, treden de volgende gebeurtenissen vaker op:

  1. Er wordt een service-principal voor de clienttoepassing gemaakt als deze nog niet bestaat. Een service-principal is het exemplaar van een toepassing of een service in uw Microsoft Entra-tenant. Toegang verleend aan de app of service is gekoppeld aan dit service-principal-object.

  2. Voor elke API waarvoor de toepassing toegang vereist, wordt er een gedelegeerde machtiging voor die API gemaakt voor de machtigingen die de toepassing nodig heeft. De toegang wordt verleend namens de gebruiker. Een gedelegeerde machtigingstoekenning machtigt een toepassing om namens een gebruiker toegang te krijgen tot een API wanneer die gebruiker zich aanmeldt.

  3. De gebruiker wordt toegewezen aan de clienttoepassing. Als u de toepassing aan de gebruiker toewijst, zorgt u ervoor dat de toepassing wordt vermeld in de Mijn apps-portal voor die gebruiker. De gebruiker kan de toegang die namens de gebruiker is verleend, bekijken en intrekken vanuit hun Mijn apps-portal.

Vereisten

Als u namens één gebruiker toestemming wilt geven aan een toepassing, hebt u het volgende nodig:

  • Een gebruikersaccount met Global Beheer istrator, Application Beheer istrator of Cloud Application Beheer istrator

Neem voordat u begint de volgende gegevens op in het Microsoft Entra-beheercentrum:

  • De app-id voor de app die u toestemming geeft. In dit artikel noemen we deze de clienttoepassing.
  • De API-machtigingen die de clienttoepassing nodig heeft. Zoek de app-id van de API en de machtigings-id's of claimwaarden op.
  • De gebruikersnaam of object-id voor de gebruiker namens wie toegang wordt verleend.

In dit voorbeeld gebruiken we Microsoft Graph PowerShell om toestemming te verlenen namens één gebruiker. De clienttoepassing is Microsoft Graph Explorer en we verlenen toegang tot de Microsoft Graph API.

Als u namens één gebruiker toestemming wilt geven voor een toepassing met Behulp van Microsoft Graph PowerShell, moet u zich aanmelden als ten minste een cloudtoepassing Beheer istrator.

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

Als u toestemming wilt verlenen aan een toepassing namens één gebruiker die Microsoft Graph API gebruikt, meldt u zich aan bij Graph Explorer als ten minste een cloudtoepassing Beheer istrator.

U moet toestemming geven voor de volgende machtigingen:

Application.ReadWrite.All, , Directory.ReadWrite.AllDelegatedPermissionGrant.ReadWrite.All.

In het volgende voorbeeld verleent u gedelegeerde machtigingen die zijn gedefinieerd door een resource-API aan een client-bedrijfstoepassing namens één gebruiker.

In het voorbeeld is de resource-ondernemingstoepassing Microsoft Graph van object-id 7ea9e944-71ce-443d-811c-71e8047b557a. Microsoft Graph definieert de gedelegeerde machtigingen en User.Read.AllGroup.Read.All. Het consentType is Principal, waarmee wordt aangegeven dat u namens één gebruiker in de tenant toestemming geeft. De object-id van de client enterprise-toepassing is b0d9b9e3-0ecf-4bfd-8dab-9273dd055a941. De principalId van de gebruiker is 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.

Let op

Wees voorzichtig! Machtigingen die via een programma zijn verleend, zijn niet onderworpen aan controle of bevestiging. Ze worden onmiddellijk van kracht.

  1. Haal alle gedelegeerde machtigingen op die zijn gedefinieerd door Microsoft Graph (de resourcetoepassing) in uw tenanttoepassing. Identificeer de gedelegeerde machtigingen die u de clienttoepassing wilt verlenen. In dit voorbeeld zijn User.Read.All de delegeringsmachtigingen en Group.Read.All

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
    
  2. Verdeel de gedelegeerde machtigingen voor de client-bedrijfstoepassing namens de gebruiker door de volgende aanvraag uit te voeren.

    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. Bevestig dat u toestemming hebt verleend aan de gebruiker door de volgende aanvraag uit te voeren.

    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94' and consentType eq 'Principal'
    
  4. Wijs de app toe aan de gebruiker. Deze toewijzing zorgt ervoor dat de gebruiker zich kan aanmelden als toewijzing is vereist en zorgt ervoor dat de app beschikbaar is via de Mijn apps-portal van de gebruiker. In het volgende voorbeeld resourceIdvertegenwoordigt u de client-app waaraan de gebruiker wordt toegewezen. De gebruiker krijgt de standaard-app-rol toegewezen.00000000-0000-0000-0000-000000000000

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

Volgende stappen