diff --git a/scripts/setup-azure-porter-wif.sh b/scripts/setup-azure-porter-wif.sh index 4c8fddf..b74a552 100755 --- a/scripts/setup-azure-porter-wif.sh +++ b/scripts/setup-azure-porter-wif.sh @@ -382,6 +382,25 @@ get_oidc_issuer() { print_success "Using OIDC issuer: $OIDC_ISSUER" } +# Wait for the federated identity credential to exist in Azure +wait4_federated_credential() { + print_status "Waiting for the federated identity credential to exist in Azure..." + + federated_credential_exists() { + az ad app federated-credential list --output=json --id="${APP_OBJECT_ID}" | + jq --exit-status "any(.subject == \"${OIDC_SUBJECT}\")" >/dev/null + } + + local i=0 + while ((i++ < 30)); do + if federated_credential_exists; then + return + fi + sleep 3 + done + federated_credential_exists # final check (will also set return status) +} + # Function to create federated identity credential create_federated_credential() { print_status "Creating federated identity credential..." @@ -398,7 +417,12 @@ create_federated_credential() { \"audiences\": [\"api://AzureADTokenExchange\"] }" > /dev/null - print_success "Federated identity credential created" + if wait4_federated_credential; then + print_success "Federated identity credential created" + else + # Note: this might not be a fatal error. + print_error "Timed out waiting for the federated-credential ${APP_OBJECT_ID} to exist in Azure." + fi } # Function to display results