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

.NET Core应用请求Microsoft Graph API访问令牌的方法与相关疑问

解决.NET Core中使用Microsoft Graph访问Teams频道的问题

1. 在Entra ID中注册测试应用并获取Client ID和密钥

  • 登录Entra管理中心,进入“应用注册”页面
  • 点击“新注册”,填写应用名称,选择账户类型(测试用选“仅此组织目录中的账户”即可),重定向URI可暂时选择“公共客户端(桌面和移动)”并填http://localhost,完成注册
  • 注册完成后,在应用的“概述”页面直接复制客户端ID(Client ID)
  • 进入“证书和密码”选项卡,点击“新建客户端密码”,设置过期时间后保存,立即复制生成的客户端密钥值(注意:密钥仅显示一次,务必保存好)

2. 修改和配置所需的Scope

Scope分委派权限(以用户身份访问)和应用权限(后台无用户上下文访问),你要查询用户自己的频道,需用委派权限:

  • 在Entra应用注册的“API权限”选项卡,点击“添加权限”
  • 选择“Microsoft Graph”,再选“委派权限”
  • 搜索Teams相关权限,比如Channel.ReadBasic.All(读取频道基本信息)、Group.Read.All(读取用户加入的群组/团队),选中后添加
  • 若为单租户应用,点击“授予[你的租户名]的管理员同意”,确保权限生效
  • 代码中请求令牌时,直接指定这些具体Scope,比如new[] { "Channel.ReadBasic.All", "Group.Read.All" },或者用https://graph.microsoft.com/.default(默认包含已配置的所有权限)

3. .NET Core代码中使用用户凭证访问Graph API

使用MSAL库获取用户令牌,再调用Graph API查询用户的Teams频道:

  1. 安装NuGet包:
Install-Package Microsoft.Identity.Client
Install-Package Microsoft.Graph
  1. 核心代码示例:
using Microsoft.Identity.Client;
using Microsoft.Graph;
using Microsoft.Graph.Models;

var clientId = "你的Client ID";
var tenantId = "你的租户ID(Entra概述页面可查)";
var scopes = new[] { "Channel.ReadBasic.All", "Group.Read.All" };

// 初始化MSAL公共客户端应用
var pca = PublicClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithRedirectUri("http://localhost")
    .Build();

// 交互式获取用户令牌(会弹出登录窗口)
var result = await pca.AcquireTokenInteractive(scopes)
    .ExecuteAsync();

// 创建Graph客户端
var graphClient = new GraphServiceClient(
    new DelegateAuthenticationProvider((requestMessage) =>
    {
        requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
        return Task.CompletedTask;
    }));

// 查询用户加入的团队及频道
var joinedTeams = await graphClient.Me.JoinedTeams.GetAsync();
foreach (var team in joinedTeams.Value)
{
    Console.WriteLine($"团队名称:{team.DisplayName}");
    var channels = await graphClient.Teams[team.Id].Channels.GetAsync();
    foreach (var channel in channels.Value)
    {
        Console.WriteLine($"  频道名称:{channel.DisplayName}");
    }
}

这段代码会弹出登录窗口,让用户输入Teams账户凭证,之后就能获取该用户加入的团队和对应频道数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:05