.NET Core控制器向Microsoft Teams发消息如何创建authProvider
解决方案
1. 前置Azure配置
- 登录Azure门户进入Azure Active Directory,选择「应用注册」>「新建注册」,填写应用名称,受支持账户类型选「仅限当前组织目录中的账户」,无需填写重定向URI,完成注册。
- 记录注册完成后生成的
客户端ID、租户ID,进入「证书和机密」页面新建客户端机密,记录生成的机密值(仅显示一次,需妥善保存)。 - 进入「API权限」页面,选择「添加权限」>「Microsoft Graph」>「应用程序权限」,搜索并勾选
ChannelMessage.Send权限,点击「授予管理员同意」完成权限配置。
2. 安装依赖NuGet包
在你的.NET Core项目中安装两个包:
Microsoft.Graph Azure.Identity
3. 注册Graph客户端
新版Graph SDK可以直接使用Azure.Identity提供的凭证类生成授权提供方,无需手动实现IAuthenticationProvider。在Program.cs中注册单例的GraphServiceClient:
using Azure.Identity; using Microsoft.Graph; // 其他配置省略 builder.Services.AddSingleton(sp => { // 生产环境建议从配置文件/KeyVault读取敏感信息,不要硬编码 var tenantId = "你的Azure AD租户ID"; var clientId = "你注册应用的客户端ID"; var clientSecret = "你生成的客户端机密"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); return new GraphServiceClient(credential); });
4. 改造控制器代码
直接注入已经配置好授权的GraphServiceClient即可使用:
[ApiController] [Route("[controller]")] public class TeamsController : ControllerBase { private readonly GraphServiceClient _graphClient; public TeamsController(GraphServiceClient graphClient) { _graphClient = graphClient; } [HttpGet] [Route("SendMessage")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(string))] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<IActionResult> SendMessageToTeams(string message) { try { var chatMessage = new ChatMessage { Body = new ItemBody { Content = message } }; await _graphClient.Teams["你的团队ID"].Channels["你的频道ID"].Messages .Request() .AddAsync(chatMessage); return Ok("消息发送成功"); } catch (Exception ex) { // 建议添加日志记录异常详情方便排查 return BadRequest($"发送失败:{ex.Message}"); } } }
注意事项
- 团队ID和频道ID可以在Teams中右键对应团队/频道,选择「获取链接」从链接地址中提取。
- 必须选择应用程序权限而非委托权限,后台服务无登录用户场景下委托权限不生效,且必须完成管理员授权操作。
- 生产环境不要硬编码客户端机密、ID等敏感信息,建议存入配置文件、密钥管理服务中读取。
内容的提问来源于stack exchange,提问作者ernesto petit
相关产品推荐
相关产品推荐

