You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bicep脚本自动化Azure AD应用注册方案咨询

Azure AD应用注册自动化Bicep实现指南

一、前置准备与权限要求

托管标识所需权限

部署用的托管标识需拥有以下Azure AD权限(可通过内置角色或自定义角色分配):

  • Application Administrator内置角色:涵盖应用注册全生命周期管理权限
  • 或自定义角色包含以下细粒度权限:
    • Application.ReadWrite.All:创建、修改Azure AD应用注册
    • DelegatedPermissionGrant.ReadWrite.All:授予委派类型API权限
    • ApplicationPermissionGrant.ReadWrite.All:授予应用类型API权限

部署上下文要求

部署时需通过托管标识完成身份验证,确保部署会话拥有上述权限。

二、Bicep脚本结构示例

1. 引用托管标识(使用现有托管标识)

param managedIdentityName string
var managedIdentity = resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', managedIdentityName)

2. 创建Azure AD应用注册(含认证配置)

resource adApp 'Microsoft.AzureAD/application@2021-04-01-preview' = {
  name: '${deployment().name}-aad-demo-app'
  properties: {
    displayName: '${deployment().name}-aad-demo-app'
    signInAudience: 'AzureADMyOrg' // 可选值:AzureADMultipleOrgs/AzureADandPersonalMicrosoftAccount
    // 认证配置:Web应用重定向URI与隐式授权设置
    web: {
      redirectUris: [
        'https://your-app-domain.com/auth/callback'
      ]
      implicitGrantSettings: {
        enableIdTokenIssuance: true
      }
    }
    // API权限配置
    requiredResourceAccess: [
      {
        resourceAppId: '00000003-0000-0000-c000-000000000000' // Microsoft Graph的固定App ID
        resourceAccess: [
          // 委派权限:User.Read
          {
            id: 'e1fe6dd8-ba31-4d61-89e7-88639da4683d'
            type: 'Scope'
          }
          // 应用权限:Directory.Read.All
          {
            id: '7ab1d382-f21e-4acd-a863-ba3e13f7da61'
            type: 'Role'
          }
        ]
      }
    ]
  }
}

3. 创建关联服务主体

resource adSp 'Microsoft.AzureAD/servicePrincipal@2021-04-01-preview' = {
  name: adApp.properties.appId
  properties: {
    appId: adApp.properties.appId
    displayName: adApp.properties.displayName
  }
}

4. 授予管理员同意的API权限

// 授予Microsoft Graph应用权限(需管理员权限)
resource appPermissionGrant 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(adSp.id, '00000003-0000-0000-c000-000000000000', '7ab1d382-f21e-4acd-a863-ba3e13f7da61')
  properties: {
    principalId: adSp.id
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '7ab1d382-f21e-4acd-a863-ba3e13f7da61')
    resourceId: resourceId('Microsoft.AzureAD/servicePrincipals', '00000003-0000-0000-c000-000000000000')
  }
}

5. 可选:生成客户端密钥

resource adAppPassword 'Microsoft.AzureAD/applicationPasswords@2021-04-01-preview' = {
  name: 'deployment-secret'
  parent: adApp
  properties: {
    displayName: 'Auto-generated client secret'
    endDateTime: dateTimeAdd(utcNow(), 'P1Y') // 有效期1年
  }
}

三、部署与验证注意事项

  • 托管标识认证部署命令示例:
    az login --identity -u <托管标识客户端ID>
    az deployment group create --resource-group <目标资源组> --template-file main.bicep --parameters managedIdentityName=<托管标识名称>
    
  • API权限ID需匹配实际权限:可通过az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "oauth2PermissionScopes"获取委派权限ID,appRoles字段获取应用权限ID。
  • 应用类型权限必须通过管理员同意完成授予,无管理员权限的标识会导致部署失败。
  • 认证配置中的重定向URI需根据应用类型(Web/移动端/桌面端)调整,支持多URI配置。

四、核心资源与角色说明

核心资源类型

  • Microsoft.AzureAD/application:Azure AD应用注册实体
  • Microsoft.AzureAD/servicePrincipal:应用对应的服务主体(用于资源访问授权)
  • Microsoft.AzureAD/applicationPasswords:客户端密钥(可选,用于应用身份验证)
  • Microsoft.Authorization/roleAssignments:API权限的授予记录

权限类型区别

  • 委派权限(type: 'Scope'):代表终端用户访问API,部分权限需管理员同意
  • 应用权限(type: 'Role'):代表应用自身独立访问API,必须经过管理员同意

内容的提问来源于stack exchange,提问作者PUpskill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:51:17