Bevilja medgivande för en enskild användares räkning med hjälp av PowerShell

I den här artikeln får du lära dig hur du beviljar medgivande för en enskild användares räkning med hjälp av PowerShell.

När en användare beviljar sitt medgivande för sig själva inträffar följande händelser oftare:

  1. Ett tjänsthuvudnamn för klientprogrammet skapas, om det inte redan finns. Ett huvudnamn för tjänsten är instansen av ett program eller en tjänst i din Microsoft Entra-klientorganisation. Åtkomst som beviljas till appen eller tjänsten är associerad med det här objektet för tjänstens huvudnamn.

  2. För varje API som programmet kräver åtkomst till skapas ett delegerat behörighetsbidrag till api:et för de behörigheter som programmet behöver. Åtkomsten beviljas för användarens räkning. Ett delegerat behörighetsbidrag ger ett program åtkomst till ett API för en användares räkning när användaren loggar in.

  3. Användaren tilldelas klientprogrammet. Genom att tilldela programmet till användaren ser du till att programmet visas i Mina appar portalen för användaren. Användaren kan granska och återkalla den åtkomst som beviljats för deras räkning från deras Mina appar portal.

Förutsättningar

För att bevilja medgivande till ett program för en användares räkning behöver du:

  • Ett användarkonto med global administratör, programadministratör eller molnprogramadministratör

Innan du börjar registrerar du följande information från administrationscentret för Microsoft Entra:

  • App-ID:t för den app som du beviljar medgivande. I den här artikeln kallar vi den för klientprogrammet.
  • DE API-behörigheter som klientprogrammet kräver. Ta reda på app-ID:t för API:et och behörighets-ID:n eller anspråksvärdena.
  • Användarnamnet eller objekt-ID:t för den användare för vars räkning åtkomst beviljas.

I det här exemplet använder vi Microsoft Graph PowerShell för att bevilja medgivande för en enskild användares räkning. Klientprogrammet är Microsoft Graph Explorer och vi beviljar åtkomst till Microsoft Graph API.

Om du vill bevilja medgivande till ett program åt en användare som använder Microsoft Graph PowerShell måste du logga in som minst molnprogramadministratör.

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

Om du vill bevilja medgivande till ett program åt en användare som använder Microsoft Graph API loggar du in på Graph Explorer som minst molnprogramadministratör.

Du måste godkänna följande behörigheter:

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

I följande exempel beviljar du delegerade behörigheter som definierats av ett resurs-API till ett klientföretagsprogram för en enskild användares räkning.

I exemplet är resursföretagsprogrammet Microsoft Graph för objekt-ID 7ea9e944-71ce-443d-811c-71e8047b557a. Microsoft Graph definierar de delegerade behörigheterna User.Read.All och Group.Read.All. ConsentType är Principal, som anger att du samtycker för en enskild användares räkning i klientorganisationen. Objekt-ID:t för klientföretagsprogrammet är b0d9b9e3-0ecf-4bfd-8dab-9273dd055a941. PrincipalId för användaren är 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.

Varning

Var försiktig! Behörigheter som beviljas programmatiskt kan inte granskas eller bekräftas. De träder i kraft omedelbart.

  1. Hämta alla delegerade behörigheter som definierats av Microsoft Graph (resursprogrammet) i klientprogrammet. Identifiera de delegerade behörigheter som du vill bevilja klientprogrammet. I det här exemplet är User.Read.All delegeringsbehörigheterna och Group.Read.All

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
    
  2. Bevilja delegerade behörigheter till klientföretagets program för användarens räkning genom att köra följande begäran.

    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. Bekräfta att du har gett användaren medgivande genom att köra följande begäran.

    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94' and consentType eq 'Principal'
    
  4. Tilldela appen till användaren. Den här tilldelningen säkerställer att användaren kan logga in om tilldelning krävs och ser till att appen är tillgänglig via användarens Mina appar portal. I följande exempel resourceIdrepresenterar den klientapp som användaren tilldelas till. Användaren tilldelas standardapprollen som är 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"
        }
    

Nästa steg