如何通过Microsoft Graph API实现.NET应用与Microsoft Teams通信集成?
.NET应用集成Microsoft Teams内部通信分步方案
一、基础环境准备
- 确保你的.NET项目基于.NET Core 3.1及以上版本(推荐.NET 6+稳定版)
- 安装必备NuGet包:
Microsoft.Graph(用于调用Teams相关接口)、Microsoft.Identity.Web(处理Azure AD身份验证)
二、Azure AD应用注册(核心前置步骤)
Teams集成依赖Azure AD身份验证,需先完成应用注册:
- 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新注册」
- 填写应用名称,账户类型选择「仅此组织目录中的账户」(内部通信场景)
- 重定向URI选「Web」,填入你的.NET应用回调地址(本地调试可填
https://localhost:5001/signin-oidc) - 注册完成后,记录应用程序(客户端)ID、目录(租户)ID,后续配置要用
- 配置API权限:进入「API权限」→「添加权限」→选择「Microsoft Graph」→「委派权限」,添加以下核心权限:
Chat.ReadWrite:读写聊天会话ChatMessage.Send:发送聊天消息User.Read:读取当前用户信息
- 点击「授予管理员同意」(内部应用需管理员授权后所有用户可使用)
- 生成客户端密码:进入「证书和密码」→「客户端密码」→「新客户端密码」,设置过期时间后保存密码值(仅显示一次,务必留存)
三、.NET应用配置与身份验证集成
- 在
appsettings.json中添加Azure AD和Graph API配置:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "你的租户域名", "TenantId": "你的租户ID", "ClientId": "你的客户端ID", "ClientSecret": "你的客户端密码", "CallbackPath": "/signin-oidc" }, "DownstreamApi": { "BaseUrl": "https://graph.microsoft.com/v1.0", "Scopes": "Chat.ReadWrite ChatMessage.Send User.Read" }
- 在
Program.cs(.NET 6+)中配置身份验证与Graph服务:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi(builder.Configuration.GetSection("DownstreamApi").Get<string[]>("Scopes")) .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi")) .AddInMemoryTokenCaches(); // 启用授权中间件 app.UseAuthorization();
四、核心通信功能实现
通过注入GraphServiceClient调用Microsoft Graph API实现Teams通信功能,以下是常用场景示例:
1. 获取当前用户的Teams聊天列表
private readonly GraphServiceClient _graphClient; // 构造函数注入GraphServiceClient public TeamsChatService(GraphServiceClient graphClient) { _graphClient = graphClient; } public async Task<List<Chat>> GetUserChatsAsync() { var chats = await _graphClient.Me.Chats.Request().GetAsync(); return chats.CurrentPage.ToList(); }
2. 发送聊天消息到指定会话
public async Task SendChatMessageAsync(string chatId, string messageContent) { var newMessage = new ChatMessage { Body = new ItemBody { ContentType = BodyType.Html, Content = messageContent } }; await _graphClient.Me.Chats[chatId].Messages.Request().AddAsync(newMessage); }
3. 创建一对一聊天会话
public async Task<Chat> CreateOneToOneChatAsync(string targetUserId) { // 先获取当前用户ID var currentUser = await _graphClient.Me.Request().GetAsync(); var newChat = new Chat { ChatType = ChatType.OneOnOne, Members = new ChatMembersCollectionPage() { new ChatMember { Roles = new List<string> { "owner" }, User = new User { Id = targetUserId } }, new ChatMember { Roles = new List<string> { "owner" }, User = new User { Id = currentUser.Id } } } }; return await _graphClient.Chats.Request().AddAsync(newChat); }
五、前端集成(按需实现)
如果是MVC/Razor Pages应用,可添加基础交互UI:
- 登录按钮:
<a asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">登录Teams账户</a> - 调用后端接口渲染聊天列表,添加消息发送表单
六、测试与部署
- 本地测试:启动应用,使用租户内的Microsoft 365账户登录,验证聊天列表、消息发送等功能
- 生产部署:更新
appsettings.json和Azure AD应用注册中的重定向URI为生产域名,确保服务器可访问Microsoft Graph API
内容的提问来源于stack exchange,提问作者Umesh Chandra
相关产品推荐
相关产品推荐

