Microsoft Graph PowerShell ile Yeni Uygulamaları Kaydedin


Bu yazıda size Microsoft Graph PowerShell ve Invoke-MgGraphRequest cmdlet'ini kullanarak Microsoft Entra'da nasıl yeni uygulamalar oluşturulacağını göstereceğim. Bu, Microsoft.Graph.Applications modülüne fazladan güvenmeden yeni uygulama kayıtları oluşturmanıza olanak tanır.

Gereksinimler

Microsoft Graph PowerShell'de uygulama kayıtları oluşturmak için öncelikle Microsoft.Graph.Authentication modülünün kurulu olduğundan emin olmanız gerekir. Bu, Connect-MgGraph ve Invoke-MgGraphRequest cmdlet'lerini kullanmanıza olanak tanır.

Ayrıca, Microsoft Graph Komut Satırı Araçları uygulamasına yönelik gerekli izinleri kabul etmek için bir Genel Yönetici hesabına da erişmeniz gerekecektir.

Yeni bir uygulamayı kaydedin

Microsoft Entra'ya yeni bir uygulama kaydetmeye çalışalım. Temel bir uygulamayı kaydederek başlayacağız ve ardından yavaş yavaş bunun üzerine özellikler ekleyeceğiz. Öncelikle Microsoft Graph PowerShell'e bağlanmanız ve Application.ReadWrite.All iznini kabul etmeniz gerekir.

Connect-MgGraph -Scope Application.ReadWrite.All

Artık daha da geliştirebileceğimiz bazı temel değişkenleri tanımlayabiliriz. Aşağıdaki komutlar kiracınıza $Name değişkeninde tanımladığınız adla yeni bir uygulama kaydedecektir.

$Name = "Application Name"
$Uri = "Beta\Applications"
$body = @{
    DisplayName = "$Name"
    signInAudience = "AzureADMyOrg"
    requiredResourceAccess = @(
    )
    servicePrincipalLockConfiguration = @{
        isEnabled = $true
        allProperties = $true
        credentialsWithUsageSign = $true
        credentialsWithUsageVerify = $true
        identifierUris = $false
        tokenEncryptionKeyId = $true
    }
}
$payload = $body | ConvertTo-Json -Depth 4
Invoke-MgGraphRequest -Method POST -Uri $Uri -ContentType "application/json" -Body $payload

Yukarıdaki kodu çalıştırırsanız uygulama kaydı kiracınızda oluşturulacak ve yalnızca kiracınızla birlikte kullanılacaktır. SignInAudiance'ı değiştirmeniz gerekiyorsa ve ek güvenlik istiyorsanız, yapılandırmaya servicePrincipalLockConfiguration özelliğini de ekledim. Ayrıca, New-MgApplication yerine Invoke-MgGraphRequest cmdlet'ini kullandığıma dikkat edin. Bunun nedeni, sonunda kodumuzu bir PowerShell işlevine dönüştüreceğimizdir ve kimlik doğrulama modülü dışındaki tüm modüllerdeki bağımlılıkları kaldırmak istiyorum. Bu komutla ilgili daha fazla bilgiyi burada bulabilirsiniz: PowerShell ile Invoke-MgGraphRequest Nasıl Kullanılır.

Aşağıdaki birkaç bölümde, diğer uygulama ayarlarını yapılandırarak yukarıdaki kodun üzerine inşa edeceğiz.

Yönlendirme URI'si ekleme

Yönlendirme URI'si, uygulamaya başarıyla yetkilendirildikten sonra kullanıcıya gönderilecek konumdur. Oluşturma sırasında uygulamanıza bir Yönlendirme URI'si eklemek için istek gövdenize aşağıdaki kodu ekleyin:

publicClient = @{
    redirectUris = @(
        "http://localhost"
    )
}

Bu, uygulamanıza http://localhost konumuna sahip bir Mobil ve masaüstü uygulamaları yönlendirme URI'sini ekleyecektir. Bu, Microsoft Grah PowerShell aracılığıyla bağlanabileceğiniz bir uygulama oluşturmak için istenen yapılandırma olacaktır.

İzinler ekleme

Aşağıdaki kod bloğunu kullanarak uygulamanıza oluşturma sırasında izinler de ekleyebilirsiniz. Bu örnekte, 00000003-0000-0000-c000-000000000000, Microsoft Graph kaynağını temsil eder ve resourceAccess dizisindeki her karma tablo, bir özel izin.

requiredResourceAccess = @(
    @{
        resourceAppId = "00000003-0000-0000-c000-000000000000"
        resourceAccess = @(
        @{
          id ="ebfcd32b-babb-40f4-a14b-42706e83bd28"
          type = "Scope"
        }
        @{
          id = "e4aa47b9-9a69-4109-82ed-36ec70d85ff1"
          type = "Scope"
        }
      )
    }
  )

Bu tür, Yetki Verilen izinler (Kapsam) veya Uygulama izinleri (Rol) eklemenize bağlı olarak Kapsam veya Rol olabilir ve her iznin benzersiz bir kimliği vardır.

Mevcut tüm izinleri, kimliği ve kapsamı görüntülemek için aşağıdaki komutu kullanın:

Find-MgGraphPermission | Select Name, PermissionType, Id | Sort -Property Name

Programlı olarak birden fazla izin ekleme

Yukarıda gördüğümüz gibi izin eklemek oldukça zahmetli olabilir. Gördüğünüz gibi, özellikle aynı anda çok sayıda izne sahip olmanız gerekiyorsa veya betiği yeniden kullanmanız ve her seferinde izni değiştirmeniz gerekiyorsa, çok fazla kod gerektirir. Bu sorunu çözmek için, bu özelliği bizim için oluşturacak birkaç satır kod yazdım.

Öncelikle ihtiyacınız olan izinleri ve izin türünü belirtmeniz gerekecek:

$Scope = "User.Read.All", "User.ReadWrite.All", "Group.Read.All", "Group.ReadWrite.All"
$context = "Delegated"

Daha sonra indirip hafızada saklamanız gereken genel bir izin listesi sakladım:

#Download permissions list
if ($context -eq "Delegated") {
    $Permissions = Invoke-WebRequest -Method GET -Uri "https://raw.githubusercontent.com/DanielBradley1/Microsoft-Graph-PowerShell-Examples/main/Permissions/DelegatedGraphPermissions.csv" | ConvertFrom-Csv
    $Type = "Scope"
} Elseif ($context -eq "Application") {
    $Permissions = Invoke-WebRequest -Method GET -Uri "https://raw.githubusercontent.com/DanielBradley1/Microsoft-Graph-PowerShell-Examples/main/Permissions/ApplicationGraphPermissions.csv" | ConvertFrom-Csv
    $Type = "Role"
}

Daha sonra, her iznin hem Kimliğini hem de tipini saklayan bir izin koleksiyonu oluşturulacaktır:

$resourceAccess = [System.Collections.Generic.List[Object]]::new()
Foreach ($Perm in $Scope){
    $obj = [PSCustomObject][ordered]@{
        "id" = ($Permissions | Where {$_.Name -eq $perm}).id
        "Type" = $Type
    }
    $resourceAccess.Add($obj)
}

Koleksiyon daha sonra geçici bir karma tablosuna eklenir ve bu da daha sonra istek gövdesinin requiredResourceAccess özelliğine eklenir.

$resource = @{
    resourceAppId = "00000003-0000-0000-c000-000000000000"
    resourceAccess = $resourceAccess
}
$body.requiredResourceAccess += $resource

Logo ekleme

Ne yazık ki Invoke-MgGraphRequest kullanılarak oluşturma sırasında logo eklenmesi desteklenmiyor. Bu sorunu aşmak için öncelikle uygulamayı oluşturmanın çıktısını şu şekilde saklamanız gerekir:

$Application = Invoke-MgGraphRequest -Method POST -Uri $Uri `
-ContentType "application/json" -Body $payload -OutputType PSObject

Daha sonra görsel olarak görselin yolunu ve içerik türünü belirtirken PUT yöntemini kullanabilirsiniz. Bu, uygulamanızın logosunu başarıyla güncelleyecektir.

Invoke-MgGraphRequest -Uri "$Uri/$($Application.id)/logo" -Method PUT `
-InputFilePath "C:\Temp\images.png" -ContentType "image/png"

Alternatif olarak, çevrimiçi olarak barındırılan ve indirmek istediğiniz bir dosyanız varsa, bunu geçici bir süre için yerel olarak indirmek ve depolamak için PowerShell'i kullanabilirsiniz. Daha sonra uygulamayı şu şekilde güncellemek için kullanılabilir:

#Temporary image path
$imgpath = "C:\Temp\Image.png"
#Image to download
$webimage = "https://i.imgur.com/dAqRsQr.png"

#Download image
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($webimage, "$imgpath")

#Update image
Invoke-MgGraphRequest -Uri "$Uri/$($Application.id)/logo" -Method PUT `
-InputFilePath $imgpath -ContentType "image/png"

#Remove temporary image
Remove-Item -path $imgpath

Dahili notlar ekleme

Dahili notlar, bir uygulamanın orijinal amacı, kapsamı ve ortamınızdaki kullanım alanları hakkında diğer yöneticilere ayrıntılı bilgi sağlamanın harika bir yoludur. Elbette, hassas bilgileri dahili notlar bölümünde saklamamalısınız; bunun yerine, başkalarının uygulamanızın amacını ve amaçlanan kullanım durumunu anlamalarına yardımcı olmak için yararlı bilgiler depolamalısınız; bu şekilde, uygulamanın kapsamı orijinal amacından saparsa , ele alınabilir veya güncellenebilir.

Başvurunuza dahili bir not eklemek için aşağıdaki kodu istek metninize ekleyin:

Notes = "This is a new note"

Uygulama sahiplerini ekleme

Microsoft'un belgelerine göre Microsoft Entra'da uygulama oluşturan kullanıcı otomatik olarak söz konusu uygulamanın sahibi oluyor. Ancak Microsoft Graph PowerShell ile uygulama oluştururken bu durum geçerli değildir. Bunun yerine uygulama oluşturulduktan sonra uygulama sahibini manuel olarak tanımlamanız gerekir.

Oluşturulan uygulamayı daha önce gördüğümüz gibi $Application değişkeninde depoladıktan sonra PowerShell kullanarak bir uygulama sahibi eklemek için aşağıdaki örneği kullanın.

#Change the object Id for the user you wish to add as an owner
$owner = @{
    "@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/387c58a2-3fea-4e8e-979d-a49469b89100"
}

Invoke-MgGraphRequest -Method POST `
-Uri "https://graph.microsoft.com/v1.0/applications/$($Application.id)/owners/`$ref" `
-ContentType "application/json" -Body $owner | ConvertTo-Json

İlgili makaleler