Как мы уже писали, для регистрации приложений в AAD потребуется модуль AzureADPreview или AzureAD. Первый более новый и актуальный, содержит обновленные командлеты.
Тонкость заключается к том, что для OAuth приложений требуется добавить client secrets (ключи приложения). Но что еще более сложно, зачастую требуется предоставить доступ к различным ресурсам Azure AD, таким как чтение Active Directory или почтовых ящиков.
Доступ к ресурсам передается к виде массива, содержащего список ID прав и ресурсов. Чтобы получить список всех существующих Delegated прав, которые доступны в AAD, выполните следующую команду:
(Get-AzureADServicePrincipal -All $true | Where-Object {$_.DisplayName -eq "Windows Azure Active Directory"}).Oauth2Permissions
Для справки приведу примеры чаще всего встречающихся ID прав:
Id : 311a71cc-e848-46a1-bdf8-97ff7156d8e6 Value : User.Read Id : cba73afc-7f69-4d86-8450-4978e04ecd1a Value : User.ReadBasic.All Id : 5778995a-e1bf-45b8-affa-663a9f3f4d04 Value : Directory.Read.All Id : 6234d376-f627-4f0f-90e0-dff25c5211a3 Value : Group.Read.All Id : c582532d-9d9e-43bd-a97c-2667a28ce295 Value : User.Read.All Id : a42657d6-7f20-40e3-b6f0-cee03008a62a Value : Directory.AccessAsUser.All
Вот пример создания приложения я несколькими ReplyURL и delegated правами User.Read и User.ReadBasic.All:
$ReplyUrls = New-Object 'System.Collections.Generic.List[String]'
[string[]]$a = "https://replyurl1.azurewebsites.net","https://replyurl2.azurewebsites.net/signin-oidc","https://localhost:9901","https://localhost:9901/signin-oidc"
$ReplyUrls.AddRange($a)
$ApiURI = "https://myapp.azurewebsites.net/"
$Homepage = "https://myapp.azurewebsites.net/"
$DisplayName = "My OAuth app"
$AzureAPIperms1 = New-Object -TypeName "microsoft.open.azuread.model.resourceAccess" -ArgumentList "311a71cc-e848-46a1-bdf8-97ff7156d8e6","Scope"
$AzureAPIperms2 = New-Object -TypeName "microsoft.open.azuread.model.resourceAccess" -ArgumentList "cba73afc-7f69-4d86-8450-4978e04ecd1a","Scope"
$AzureAPI = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
$AzureAPI.ResourceAppId = "00000002-0000-0000-c000-000000000000"
$AzureAPI.ResourceAccess = $AzureAPIperms1,$AzureAPIperms2
# OAuth application
try {
$NewOAuthapp = New-AzureADApplication -DisplayName $DisplayName -IdentifierUris $ApiURI -Homepage $Homepage -ReplyUrls $ReplyUrls -RequiredResourceAccess @($AzureAPI)
}
catch { $_.Exception.Message; break }
$NewOAuthapp | select DisplayName,AppId,Homepage,ReplyUrls,IdentifierUris | fl
Теперь к зарегистрированному приложению необходимо добавить 2 ключа, к примеру, сроком на 1 год и на 2 года.
# Create and set access key $key1 = New-AzureADApplicationPasswordCredential -ObjectId $NewOAuthapp.ObjectId -CustomKeyIdentifier "Key1" -EndDate (get-date).AddYears(1) $key2 = New-AzureADApplicationPasswordCredential -ObjectId $NewOAuthapp.ObjectId -CustomKeyIdentifier "Key2" -EndDate (get-date).AddYears(2) "key1 value is: $($key1.value)" "key2 value is: $($key2.value)"
Ну и наконец, чтобы приложение правильно находилось и отображалось в портале в разделе All Applications, добавим к нему правильный тэг
WindowsAzureActiveDirectoryIntegratedApp:
$NewAppSPN = New-AzureADServicePrincipal -AppId $NewOAuthapp.AppId -Tags {WindowsAzureActiveDirectoryIntegratedApp}