Как мы уже писали, для регистрации приложений в 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}