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

时间:2020-01-22 02:48:37

标签: node.js azure-active-directory microsoft-graph-api microsoft-teams microsoft-graph-teams

我想创建一个能够自动在Microsoft Teams中发送消息的Web服务。我尝试对as an application进行身份验证,但是当前Microsoft不支持授予应用程序权限以在Teams中发送消息,因此,这里的唯一选择是使用具有真实凭据的服务帐户进行身份验证(除非有其他方法?)。 This method仅指定使用用户交互来以用户身份登录。

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

2 个答案:

答案 0 :(得分:1)

似乎您有误会。

您的场景实际上与this post相同。

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

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

enter image description here

添加此权限后,请不要忘记单击“对{您的租户}的授予管理员同意”。

然后您将获得如下访问令牌:

enter image description here

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

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

答案 1 :(得分:0)

我可以想到其他几种方式。

1)一种是您可以使用Microsoft Bot Framework创建一个Bot,并且将该机器人安装到特定团队后,它可以发送“主动”消息(即中没有消息)响应(而不是在您需要时)。

从本质上讲,当您将机器人添加到团队后,您可以访问机器人中的特定事件(通用机器人的OnMember会员,现在有一个仅适用于团队的新事件)。我在Detect bot application open event的答案中对此有更多了解。在这种情况下,您会获得以后需要的信息,可以将其存储在数据库中或任何地方,然后创建消息,就像是您的机器人在通道上发布消息一样。您可以在Programmatically sending a message to a bot in Microsoft Teams上找到更多相关内容。

上面的这个选项需要很多工作,但是如果您希望从漫游器中获得其他功能(例如,从用户接收消息的功能),则很有用

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

当然,也可以选择诸如Flow(电源自动化)之类的功能,但是您已经在编写代码,因此上述操作之一可能会更容易。

希望有帮助