.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频道:
- 安装NuGet包:
Install-Package Microsoft.Identity.Client Install-Package Microsoft.Graph
- 核心代码示例:
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
相关产品推荐
相关产品推荐

