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

使用Microsoft Graph API发送Teams通知遇密码过期问题求解决方案

解决方案:用客户端凭证流替代密码授权发送Teams聊天消息

问题背景

此前使用密码授权类型获取Bearer令牌发送Teams通知,出现密码过期错误:

{
    "error": "invalid_grant",
    "error_description": "AADSTS50055: The password is expired. Trace ID: 411e883a-ac32-4387-9e08-e4a6cccf8300 Correlation ID: bde4686c-1e78-41d3-bb60-a75190ca8891 Timestamp: 2024-12-03 14:12:36Z",
    "error_codes": [50055],
    "timestamp": "2024-12-03 14:12:36Z",
    "trace_id": "411e883a-ac32-4387-9e08-e4a6cccf8300",
    "correlation_id": "bde4686c-1e78-41d3-bb60-a75190ca8891",
    "error_uri": "https://login.microsoftonline.com/error?code=50055",
    "suberror": "user_password_expired"
}

修改密码后功能恢复,但生产环境定期更新密码不可行,需改用客户端凭证流实现无密码长期运行。

具体操作步骤

1. 配置Azure AD应用权限

  • 登录Azure门户,找到目标应用注册,进入API权限页面
  • 添加Microsoft Graph的应用权限(非委派权限):
    • 发送一对一聊天消息需添加 ChatMessage.Send
    • 发送到团队频道需添加 ChannelMessage.Send
  • 点击授予管理员同意,确保权限生效

2. 生成客户端凭证

  • 在应用注册的证书和密码页面,选择客户端密码,点击新建客户端密码
  • 设置密码有效期(最长可选24个月),保存生成的密码值(仅显示一次,务必记录)

3. 获取客户端凭证令牌

发送POST请求到Azure AD令牌端点:

POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id={你的客户端ID}
&scope=https://graph.microsoft.com/.default
&client_secret={你的客户端密码}
&grant_type=client_credentials

返回的access_token即可用于调用Graph API。

4. 调用API发送消息

发送到一对一聊天

POST https://graph.microsoft.com/v1.0/chats/{聊天ID}/messages
Content-Type: application/json

{
    "body": {
        "content": "这是通过客户端凭证流发送的测试消息"
    }
}

发送到团队频道

POST https://graph.microsoft.com/v1.0/teams/{团队ID}/channels/{频道ID}/messages
Content-Type: application/json

{
    "body": {
        "content": "这是通过客户端凭证流发送的频道消息"
    }
}

注意事项

  • 客户端凭证流以应用身份执行操作,消息发送者显示为应用名称
  • 若需以特定用户身份发送,可考虑On-Behalf-Of流,但需用户授权,不适合无交互场景
  • 客户端密码到期前需轮换,可通过Azure自动化工具实现自动更新,降低维护成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:52:34