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

如何在Microsoft Graph Explorer中获取用户可访问的Microsoft 365应用列表?

获取用户有权访问的Microsoft 365应用列表(类似myapps.com)

核心说明

Microsoft Graph没有直接返回用户可访问所有M365应用的单一端点,但可以通过以下两种方案实现类似myapps.com的展示效果:


方案1:通过应用角色分配关联服务主体(Service Principal)

此方案适用于获取被直接分配权限的M365应用,步骤如下:

步骤1:获取用户的应用角色分配

调用以下端点获取用户被分配的所有应用角色记录:

GET https://graph.microsoft.com/v1.0/me/appRoleAssignments

返回结果中,resourceId字段对应应用的服务主体(Service Principal)ID。

步骤2:批量获取对应的服务主体信息

使用上一步得到的resourceId,调用服务主体端点筛选出M365相关应用:

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=id in ('{resourceId1}', '{resourceId2}') and tags/any(t: t eq 'Microsoft365')

通过tags筛选可以精准定位Microsoft 365官方应用,返回的displayName即为应用名称(如"Outlook", "Microsoft PowerPoint")。

权限要求

需要为应用或用户授予以下权限之一:

  • Directory.Read.All(应用权限)
  • User.Read.All(委托权限)

示例代码(C# Graph SDK)

var graphClient = new GraphServiceClient(authProvider);

// 获取用户的应用角色分配
var appRoleAssignments = await graphClient.Me.AppRoleAssignments.Request().GetAsync();

// 提取所有服务主体ID
var resourceIds = appRoleAssignments.Select(a => a.ResourceId.ToString()).ToList();

// 获取对应的M365服务主体
var servicePrincipals = await graphClient.ServicePrincipals
    .Request()
    .Filter($"id in ({string.Join(",", resourceIds.Select(id => $"'{id}'"))}) and tags/any(t: t eq 'Microsoft365')")
    .Select(sp => new { sp.DisplayName, sp.AppId })
    .GetAsync();

// 输出应用列表
foreach (var sp in servicePrincipals)
{
    Console.WriteLine($"应用名称: {sp.DisplayName}, App ID: {sp.AppId}");
}

方案2:通过已分配的服务计划映射M365应用

此方案适用于获取用户通过许可证分配获得访问权限的M365应用,步骤如下:

调用端点获取已分配的服务计划

GET https://graph.microsoft.com/v1.0/me/assignedPlans

返回结果中的servicePlanName对应M365服务计划,可映射为对应的应用:

  • EXCHANGE_S_ENTERPRISE → Outlook
  • SHAREPOINTWAC → Office Online(Word/PowerPoint/Excel)
  • OFFICESUBSCRIPTION → 桌面版Office套件
  • TEAMS1 → Microsoft Teams
  • ONEDRIVE_BASIC → OneDrive

权限要求

仅需User.Read(委托权限)或User.Read.All(应用权限)即可访问。

示例代码(REST调用)

// 使用fetch API调用
async function getUserM365Apps() {
    const response = await fetch('https://graph.microsoft.com/v1.0/me/assignedPlans', {
        headers: {
            'Authorization': 'Bearer ' + accessToken
        }
    });
    const data = await response.json();
    
    // 服务计划到应用名称的映射
    const planToApp = {
        'EXCHANGE_S_ENTERPRISE': 'Outlook',
        'SHAREPOINTWAC': 'Office Online (Word/PowerPoint/Excel)',
        'OFFICESUBSCRIPTION': '桌面版Office套件',
        'TEAMS1': 'Microsoft Teams',
        'ONEDRIVE_BASIC': 'OneDrive'
    };
    
    // 提取并输出应用列表
    const apps = data.value.map(plan => planToApp[plan.servicePlanName] || plan.servicePlanName);
    console.log('用户可访问的M365应用:', apps);
}

注意事项

  • /me/applications端点仅返回用户拥有的应用(即用户创建的应用),并非用户有权访问的应用,这就是你之前未得到预期结果的原因。
  • 若要完全匹配myapps.com的内容,需要同时结合上述两种方案:直接分配的应用+许可证关联的应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:43