如何在AAD中为Azure静态Web应用预览环境动态配置重定向URL?
自动化Azure AD应用重定向URI适配Static Web Apps预览环境
解决方案概述
通过扩展GitHub Actions工作流,在拉取请求(PR)创建时自动将预览环境的AAD回调URI添加到Azure AD应用配置中,在PR合并/关闭时自动移除该URI,无需手动操作。
步骤1:配置GitHub仓库密钥
在GitHub仓库的Settings > Secrets and variables > Actions中添加以下密钥:
AZURE_CREDENTIALS:拥有Azure AD应用修改权限的服务主体凭据(可通过az ad sp create-for-rbac生成)AD_APP_ID:你的Azure AD应用的客户端ID
步骤2:扩展现有GitHub Workflow
在你现有的Static Web Apps部署Workflow文件(通常是.github/workflows/azure-static-web-apps-*.yml)中,添加以下逻辑:
2.1 触发条件保持不变
确保Workflow仍监听PR事件:
on: pull_request: types: [opened, synchronize, closed] branches: - main
2.2 添加处理重定向URI的任务
在部署任务后,新增任务处理AAD应用的重定向URI:
jobs: build_and_deploy_job: if: github.event.action == 'opened' || github.event.action == 'synchronize' runs-on: ubuntu-latest name: Build and Deploy Job steps: # 原有的代码检出、项目构建步骤... - name: Deploy to Azure Static Web Apps id: deploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }} action: "upload" app_location: "/" # 根据你的项目目录结构调整 api_location: "" # 无后端API可留空 output_location: "dist" # 项目构建产物目录,按需修改 # 新增:将预览环境的AAD回调URI添加到Azure AD应用 - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Update AD app redirect URIs run: | CALLBACK_URI="${{ steps.deploy.outputs.static_web_app_url }}/.auth/login/aad/callback" az ad app update --id ${{ secrets.AD_APP_ID }} --add replyUrls "$CALLBACK_URI" close_job: if: github.event.action == 'closed' runs-on: ubuntu-latest name: Cleanup Preview Environment Redirect URI steps: - name: Generate preview URL from PR ID # 按你的预览环境URL格式生成对应地址 run: | PREVIEW_URL="https://your-prefix-${{ github.event.number }}.westeurope.4.azurestaticapps.net" echo "PREVIEW_URL=$PREVIEW_URL" >> $GITHUB_ENV - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Remove AAD redirect URI run: | CALLBACK_URI="${{ env.PREVIEW_URL }}/.auth/login/aad/callback" az ad app update --id ${{ secrets.AD_APP_ID }} --remove replyUrls "$CALLBACK_URI"
关键注意事项
- 服务主体权限:用于登录Azure的服务主体必须拥有Application Administrator角色,或被授予修改目标AD应用的
Application.ReadWrite.OwnedBy权限。 - 预览URL提取:如果PR关闭时无法通过部署步骤输出获取预览URL,可根据PR ID按固定格式生成,或从PR的部署通知评论中提取。
- 重复处理:PR重新打开时重复添加同一URI不会触发Azure AD应用报错,系统会自动忽略重复项。
内容的提问来源于stack exchange,提问作者JakobFerdinand
相关产品推荐
相关产品推荐

