You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过动态同意为Entra应用授予指定Application权限?

问题解答

核心结论

无法通过动态同意(手动构造含具体权限的URL)单独指定同时存在应用权限和委托权限的应用级权限项,仅能对无对应委托权限的权限(如EduRoster.Read.All)实现这种操作。

原因说明

  • Microsoft Entra ID的动态同意逻辑中,若某权限同时提供应用权限和委托权限两种类型(比如TeamSettings.Read.All),构造URL时指定该权限名称会默认匹配委托权限,而非应用权限。
  • /.default范围的设计初衷是批量授予应用注册中已配置的所有应用级权限,它不支持拆分选择特定权限;但所谓的“覆盖现有权限”其实是误解——只要你在应用注册的权限列表中保留了之前已有的应用权限,使用/.default同意后,这些权限会和新添加的权限一并保留,不会被移除。

可行解决方案

方案1:预配置权限后使用/.default范围

  1. 登录Entra ID管理中心,找到你的应用注册,进入「API权限」页面。
  2. 添加EduRoster.Read.AllTeamSettings.Read.All的应用级权限(确保选择的是「应用权限」类型,而非委托权限)。
  3. 构造管理员同意URL,使用scope=https://graph.microsoft.com/.default参数。管理员完成同意后,应用会获得所有已在权限列表中配置的应用级权限,同时不影响已有的委托权限。

方案2:手动在管理中心授予权限

直接在应用注册的「API权限」页面,点击「授予管理员同意」按钮,在弹窗中选择需要添加的TeamSettings.Read.All应用权限即可。这种方式可以精准选择目标权限,完全不会影响已有的任何权限配置。

方案3:通过Microsoft Graph API自动化授予

调用POST /servicePrincipals/{servicePrincipalId}/appRoleAssignments接口,手动为应用的服务主体分配指定的应用权限:

  1. 先通过GET /servicePrincipals?$filter=displayName eq '你的应用名称'获取服务主体ID。
  2. 通过GET /servicePrincipals/{graphServicePrincipalId}/appRoles(Graph的服务主体ID固定为00000003-0000-0000-c000-000000000000)找到TeamSettings.Read.AllEduRoster.Read.All对应的id(即appRole ID)。
  3. 构造请求体发送POST请求,完成权限分配:
{
  "principalId": "你的应用服务主体ID",
  "resourceId": "00000003-0000-0000-c000-000000000000",
  "appRoleId": "目标权限的appRole ID"
}

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

火山引擎 最新活动