В Azure AD мы модем регистрировать 4 типа приложений: OAuth Web Apps, OAuth Native, SAML и Azure App proxy. Чаще всего встречаются
OAuth Web регистрации.
Ниже полный код скрипта, который создает приложение, навешивает на него права в Azure AD и создает два ключа, а в конце регистрирует SPN для него.
Обратите внимание, что мы добавляем несколько Reply URL в массиве. Вы можете оставить столько, сколько требуется.
В качестве прав, я добавлял User.Read и User.ReadBasic.All. ID для всех остальных вы можете получить, выполнив команду:
(Get-AzureADServicePrincipal -All $true | Where-Object {$_.DisplayName -eq "Windows Azure Active Directory"}).Oauth2Permissions
Я также создаю 2 ключа валидностью на 1 и 2 года.
Нну а SPN в конце добавляет правильный тег для того, чтобы AAD правильно классифицировала приложение.
Connect-AzureAD
<#
Get all available delegated permissions for API Windows Azure Active Directory
(Get-AzureADServicePrincipal -All $true | Where-Object {$_.DisplayName -eq "Windows Azure Active Directory"}).Oauth2Permissions
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
#>
$ReplyUrls = New-Object 'System.Collections.Generic.List[String]'
# [string[]]$a = "https://1st","https://2nd","https://3rd","https://webapp-1.azurewebsites.net"
[string[]]$a = "https://webapp-1.azurewebsites.net/"
$ReplyUrls.AddRange($a)
$ApiURI = "https://webapp-1.azurewebsites.net/"
$Homepage = "https://webapp-1.azurewebsites.net/"
$DisplayName = "Webapp-1 PRD"
$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
# 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)"
# Add SPN to our app. Note the tag: https://docs.microsoft.com/en-us/powershell/module/azuread/new-azureadserviceprincipal?view=azureadps-2.0
$NewAppSPN = New-AzureADServicePrincipal -AppId $NewOAuthapp.AppId -Tags {WindowsAzureActiveDirectoryIntegratedApp}