使用服务帐户凭据对 Microsoft Graph 进行 OAuth2 身份验证

OAuth2 authentication for Microsoft Graph using service account credentials

我想创建一个能够在 Microsoft Teams 中自动发送消息的网络服务。我尝试验证 as an application, but currently Microsoft does not support granting application permissions to send messages in Teams, so the only choice here is to authenticate using a service account with real credentials (Unless there is another way?). This method 仅指定使用用户交互以用户身份登录。

我想使用服务帐户 teamchatbot@domain.com 通过 Microsoft Graph 进行身份验证,以便在 Microsoft Teams 上发送消息。 (与 类似,但由于我没有访问资源,所以有点不同。)有没有一种方法可以代表服务帐户静默获取访问令牌以发送消息?

我还能想到其他几种方法。

1) 一个是您可以使用 Microsoft Bot Framework 创建一个 Bot,一旦该 bot 安装到特定团队,它就可以发送 "pro-active" 消息(即不是 响应用户的消息,而是在您需要时响应。

基本上,当您的机器人被添加到团队中时,您可以访问机器人中的特定事件(OnMembersAdded 用于一般机器人,现在有一个新事件仅适用于团队)。在我对 . In this event, you get the information you need for later, which you can store in a database or wherever, and then create the message as if it's your bot posting to the channel. You can see more on that at .

的回答中查看更多相关信息

上面的这个选项需要做很多工作,但如果您希望机器人具有其他功能(例如接收用户消息的能力),那么它很有用

2) 另一种更简单的方法是直接创建一个到通道的传入 webhook。 Here's a post 使用 PowerShell 执行此操作,因此您可以执行此操作以进行简单测试并从那里推断出 Node。

当然,Flow (Power Automate) 之类的东西也是一种选择,但您已经在编写代码,因此上面的其中一个可能更容易。

希望对您有所帮助

看来你是误会了

你的场景其实和一样。

您应该使用 Resource Owner Password Credentials 调用 Microsoft Graph API 来发送消息。

基于permissions,您需要Group.ReadWrite.All委托权限。因此,您需要先将此权限添加到您的 Azure AD 应用程序中。

添加此权限后别忘了点击"Grant admin consent for {your tenant}"。

然后您可以获得这样的访问令牌:

您可以看到 https://graph.microsoft.com/Group.ReadWrite.All 已包含在响应中。

现在您可以使用此访问令牌来调用 POST /teams/{id}/channels/{id}/messages