generators/app/templates/scripts/preprovision.ps1 (68 lines of code) (raw):
#!/usr/bin/env pwsh
$ErrorActionPreference = 'Stop'
if ($env:DEBUG -match '^1|yes|true$') {
Set-PSDebug -Trace 2
}
if ($env:USE_AUTHENTICATION -match "true") {
Write-Host " ➜ " -ForegroundColor Green -NoNewline
Write-Host "Authentication is enabled creating app registration..."
if (-not $env:AZURE_AUTH_TENANT_ID) {
$env:AZURE_AUTH_TENANT_ID = az account show --query tenantId -o tsv
Write-Host " AZURE_AUTH_TENANT_ID not provided: Default to $($env:AZURE_AUTH_TENANT_ID) from AZ CLI" -ForegroundColor Yellow
}
azd env set AZURE_AUTH_TENANT_ID $env:AZURE_AUTH_TENANT_ID
$app_name = "$($env:AZURE_ENV_NAME)-app"
$current_user_upn = az ad signed-in-user show --query userPrincipalName -o tsv
$current_user_id = az ad user show --id $current_user_upn --query id --output tsv
$AZURE_CLIENT_APP_ID = az ad app list --display-name $app_name --query '[].appId' -o tsv
Write-Host " Current user : $current_user_upn"
Write-Host " Current tenant : $($env:AZURE_AUTH_TENANT_ID)"
Write-Host " App Registration name : $app_name"
if (-not $AZURE_CLIENT_APP_ID) {
Write-Host " Creating app $app_name..."
$azure_app_object_id = az ad app create `
--display-name $app_name `
--web-redirect-uris http://localhost:5801/ `
--query id `
--output tsv
$AZURE_CLIENT_APP_ID = az ad app show --id $azure_app_object_id --query appId -o tsv
az ad app update `
--id $AZURE_CLIENT_APP_ID `
--identifier-uris "api://$AZURE_CLIENT_APP_ID" `
--enable-id-token-issuance true `
--enable-access-token-issuance true `
--required-resource-accesses @scripts/requiredResourceAccess.json
$SERVICE_PRINCIPAL_ID = az ad sp create `
--id $AZURE_CLIENT_APP_ID `
--query id `
--output tsv
az ad app owner add `
--id $AZURE_CLIENT_APP_ID `
--owner-object-id $current_user_id
$AZURE_CLIENT_APP_SECRET = az ad app credential reset `
--id $AZURE_CLIENT_APP_ID `
--display-name "client-secret" `
--query password `
--years 1 `
--output tsv
az rest `
--method PATCH `
--headers 'Content-Type=application/json' `
--uri "https://graph.microsoft.com/v1.0/applications/$azure_app_object_id" `
--body @scripts/oauth2PermissionScopes.json
az rest `
--method PATCH `
--headers 'Content-Type=application/json' `
--uri "https://graph.microsoft.com/v1.0/applications/$azure_app_object_id" `
--body @scripts/preAuthorizedApplications.json
azd env set AZURE_CLIENT_APP_SECRET $AZURE_CLIENT_APP_SECRET
Write-Host " App $app_name created with ID $AZURE_CLIENT_APP_ID and SP ID $SERVICE_PRINCIPAL_ID"
}
else {
Write-Host " App '$AZURE_CLIENT_APP_ID' already exists, skipping creation" -ForegroundColor Yellow
}
azd env set AZURE_CLIENT_APP_ID $AZURE_CLIENT_APP_ID
Write-Host " ➜ " -ForegroundColor Green -NoNewline
Write-Host "Application registration $app_name ($AZURE_CLIENT_APP_ID) has been created."
# Credits: inspired by https://gpiskas.com/posts/automate-creation-app-registration-azure-cli/#creating-and-modifying-the-app-registration
}