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

使用Graph API/SDK/门户获取服务主体应用角色分配时的不一致行为

解决Azure AD服务主体应用角色分配查询的不一致问题

问题原因

这是Microsoft Graph API v1.0的默认行为差异,两个接口对appRoleAssignedTo的返回逻辑做了不同的默认过滤:

  • GET /servicePrincipals/{id}/appRoleAssignedTo(列表接口):默认仅返回用户和服务主体的应用角色分配,自动过滤了组的分配,这和Azure Portal中SP的“用户和组”页面默认只显示用户的逻辑一致。
  • GET /servicePrincipals/{id}?$expand=appRoleAssignedTo(带展开的详情接口):默认仅返回组的应用角色分配,自动过滤了用户的分配。

正确获取所有应用角色分配的方案

方案1:显式过滤主体类型(推荐)

直接在列表接口中添加$filter参数,强制返回用户和组的所有分配记录:

HTTP 请求示例

GET https://graph.microsoft.com/v1.0/servicePrincipals/<service-principal-id>/appRoleAssignedTo?$filter=principalType eq 'User' or principalType eq 'Group'

.NET SDK 代码示例

var authProvider = new TokenCredentialAuthProvider(new DefaultAzureCredential());
var graphServiceClient = new GraphServiceClient("https://graph.microsoft.com/v1.0", authProvider);

var request = graphServiceClient.ServicePrincipals["my-service-principal-id"]
    .AppRoleAssignedTo
    .Request()
    .Filter("principalType eq 'User' or principalType eq 'Group'");

var response = await request.GetAsync(); // 包含用户和组的所有应用角色分配

方案2:合并两个接口的结果

如果无法使用过滤参数,可分别调用两个接口再合并结果集(注意去重,避免重复记录):

  1. 调用列表接口获取用户/服务主体的分配
  2. 调用带展开的详情接口获取组的分配
  3. 将两个结果合并为完整列表

补充说明

Azure Portal中SP的“用户和组”页面默认只显示用户,若要查看组的分配,可在页面内使用筛选器选择“组”类型,或切换到对应视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:55:29