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

使用Bicep添加API权限仅显示其他已授予权限,如何实现管理员同意?

使用Bicep为应用注册添加API权限并完成管理员同意的正确步骤

问题原因分析

你遇到的「权限显示在其他已授予权限」的情况,是因为当前使用的oauth2PermissionGrants资源是针对**委托权限(Delegated Permissions)**的租户级管理员同意,这种通过Graph API直接授予的同意,在Entra ID门户中会被归类到「其他已授予权限」,而非直接显示在「API权限」的已授予列表中。但这并不影响权限的生效,只是展示位置不同。

如果你的目标是让权限显示在「已授予的权限」列表(如你提供的示例截图),需要先明确你要授予的是委托权限还是应用权限,再调整Bicep代码。

针对委托权限的调整(保持权限生效,优化显示)

如果确实需要委托权限的Policy.Read.All,可以确保requiredResourceAccess中的权限配置与oauth2PermissionGrants的scope完全匹配,虽然门户仍可能显示在「其他已授予权限」,但权限已正常生效。需要确认:

  • requiredResourceAccess中的resourceAccess ID和type正确对应委托权限
  • 授予的scope字符串与权限名称完全一致(你的代码中已经匹配:Policy.Read.All对应ID 246dd0d5-5bd0-4def-940b-0421030a5b68)

针对应用权限的正确配置(显示在已授予列表)

如果你的场景需要的是应用权限(无需用户上下文的后台访问),则需要修改代码,使用appRoleAssignments资源来完成管理员同意,这样权限会显示在「API权限」的已授予列表中:

修改后的示例代码

targetScope = 'tenant'

// entra-external-setup.bicep
extension microsoftGraph

param appName string = 'cspm'
param deployEnvironment string = 'lb'

var applicationRegistrationName = '${appName}-${deployEnvironment}-app-01'

var redirectUris = deployEnvironment == 'prod' 
  ? ['https://app.${appName}.io'] 
  : ['https://${applicationRegistrationName}.azurewebsites.net', 'https://localhost:44305']

resource microsoftGraphServicePrincipal 'Microsoft.Graph/servicePrincipals@v1.0' existing = {
  appId: '00000003-0000-0000-c000-000000000000'
}

resource applicationRegistration 'Microsoft.Graph/applications@v1.0' = {
  uniqueName: applicationRegistrationName
  displayName: applicationRegistrationName
  web: {
    redirectUris: [for item in redirectUris: '${item}/sigin-oidc']
    implicitGrantSettings: {
      enableIdTokenIssuance: true
    }
  }
  requiredResourceAccess: [
    {
     resourceAppId: microsoftGraphServicePrincipal.appId
     resourceAccess: [
       { 
         // 应用权限Policy.Read.All的ID
         id: '15db9108-108e-4709-879c-81382c8bf4a9'
         type: 'Role' // 应用权限使用Role类型
      }
     ]
    }
  ]
}

resource applicationRegistrationServicePrincipal 'Microsoft.Graph/servicePrincipals@v1.0' = {
  appId: applicationRegistration.appId
}

// 应用权限的管理员同意:使用appRoleAssignments
resource appRoleAssignment 'Microsoft.Graph/servicePrincipals/${applicationRegistrationServicePrincipal.name}/appRoleAssignments@v1.0' = {
  principalId: applicationRegistrationServicePrincipal.id
  resourceId: microsoftGraphServicePrincipal.id
  appRoleId: '15db9108-108e-4709-879c-81382c8bf4a9' // 对应应用权限的ID
}

关键注意事项

  • 权限类型区分:委托权限用oauth2PermissionGrants,应用权限用appRoleAssignments,两者不可混用
  • 权限ID验证:确保使用的权限ID与权限类型(委托/应用)匹配,可以通过Graph API查询服务主体的oauth2PermissionScopes(委托权限)或appRoles(应用权限)来获取正确ID
  • 部署权限:执行Bicep部署的账号需要拥有Entra ID的全局管理员、应用程序管理员或云应用程序管理员权限,才能完成管理员同意操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:25:20