Aracılığıyla paylaş


PowerShell kullanarak tek bir kullanıcı adına onay verme

Bu makalede, PowerShell kullanarak tek bir kullanıcı adına nasıl onay vereceğinizi öğreneceksiniz.

Bir kullanıcı kendisi için onay verince, aşağıdaki olaylar daha sık gerçekleşir:

  1. İstemci uygulaması yoksa, bir hizmet sorumlusu oluşturulur. Hizmet sorumlusu, Microsoft Entra kiracınızdaki bir uygulamanın veya hizmetin örneğidir. Uygulamaya veya hizmete verilen erişim bu hizmet sorumlusu nesnesiyle ilişkilendirilir.

  2. Uygulamanın erişim gerektirdiği her API için, uygulamanın ihtiyaç duyduğu izinler için bu API'ye bir temsilci izni oluşturulur. Erişim, kullanıcı adına verilir. Temsilci izni, bir uygulamaya kullanıcı oturum açtığında kullanıcı adına API'ye erişme yetkisi verir.

  3. Kullanıcıya istemci uygulaması atanır. Uygulamanın kullanıcıya atanması, uygulamanın söz konusu kullanıcının Uygulamalarım portalında listelendiğinden emin olunmasını sağlar. Kullanıcı, Uygulamalarım portalından kendi adına verilen erişimi gözden geçirebilir ve iptal edebilir.

Önkoşullar

Bir uygulamaya bir kullanıcı adına onay vermek için şunları yapmanız gerekir:

  • Ayrıcalıklı Rol Yöneticisi, Uygulama Yöneticisi veya Bulut Uygulaması Yöneticisi olan bir kullanıcı hesabı

Başlamadan önce, Microsoft Entra yönetim merkezinden aşağıdaki ayrıntıları kaydedin:

  • Onay verdiğiniz uygulamanın uygulama kimliği. Bu makalenin amaçları doğrultusunda istemci uygulaması olarak adlandırıyoruz.
  • İstemci uygulamasının gerektirdiği API izinleri. API'nin uygulama kimliğini ve izin kimliklerini veya talep değerlerini öğrenin.
  • Adına erişim verilen kullanıcının kullanıcı adı veya nesne kimliği.

Bu örnekte, tek bir kullanıcı adına onay vermek için Microsoft Graph PowerShell'i kullanırız. İstemci uygulaması Microsoft Graph Gezgini'dir ve Microsoft Graph API'sine erişim izni veririz.

Microsoft Graph PowerShell'i kullanarak bir uygulamaya bir kullanıcı adına onay vermek için en azından Bulut Uygulaması Yöneticisi olarak oturum açmanız gerekir.

# 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 portal.")
} 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"
}

Microsoft Graph API'sini kullanarak bir uygulamaya bir kullanıcı adına onay vermek için Graph Explorer'da en az Bir Bulut Uygulaması Yöneticisi olarak oturum açın.

Aşağıdaki izinleri onaylamanız gerekir:

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

Aşağıdaki örnekte, bir kaynak API'si tarafından tanımlanan temsilci izinlerini tek bir kullanıcı adına bir istemci kurumsal uygulamasına verirsiniz.

Örnekte, kaynak kurumsal uygulaması nesne kimliğinin Microsoft Graph'ıdır aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Microsoft Graph, User.Read.All ve Group.Read.Alltemsilci izinlerini tanımlar. consentType, Principalkiracıdaki tek bir kullanıcı adına onay verdiğinizi belirtir. İstemci kurumsal uygulamasının nesne kimliği şeklindedir aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Kullanıcının principalId değeridir aaaaaaaa-bbbb-cccc-1111-222222222222.

Dikkat

Dikkat et! Program aracılığıyla verilen izinler gözden geçirilmeye veya onaya tabi değildir. Hemen yürürlüğe girecekler.

  1. Kiracı uygulamanızda Microsoft graph (kaynak uygulaması) tarafından tanımlanan tüm temsilci izinlerini alın. İstemci uygulamasına vermek istediğiniz temsilci izinlerini belirleyin. Bu örnekte temsilci seçme izinleri ve şeklindedir User.Read.AllGroup.Read.All

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
    
  2. Aşağıdaki isteği çalıştırarak kullanıcı adına istemci kurumsal uygulamasına temsilci izinleri verin.

    POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
    
    Request body
    {
       "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
       "consentType": "Principal",
       "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
       "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
       "scope": "User.Read.All Group.Read.All"
    }
    
  3. Aşağıdaki isteği çalıştırarak kullanıcıya onay verdiğinizi onaylayın.

    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq '00001111-aaaa-2222-bbbb-3333cccc4444' and consentType eq 'Principal'
    
  4. Uygulamayı kullanıcıya atayın. Bu atama, atama gerekiyorsa kullanıcının oturum açabilmesini sağlar ve uygulamanın kullanıcının Uygulamalarım portalı üzerinden kullanılabilir olmasını sağlar. Aşağıdaki örnekte, resourceIdkullanıcının atandığı istemci uygulamasını temsil eder. Kullanıcıya olan varsayılan uygulama rolü 00000000-0000-0000-0000-000000000000atanır.

        POST /servicePrincipals/resource-servicePrincipal-id/appRoleAssignedTo
    
        {
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
        "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
        "appRoleId": "00000000-0000-0000-0000-000000000000"
        }
    

Sonraki adımlar