【问题标题】:OAuth2 authentication for Microsoft Graph using service account credentials使用服务帐户凭据对 Microsoft Graph 进行 OAuth2 身份验证
【发布时间】:2020-01-22 14:15:12
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    看来你是误会了。

    你的场景其实和this post一样。

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

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

    添加此权限后,不要忘记点击“为{您的租户}授予管理员许可”。

    然后你可以像这样得到一个访问令牌:

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

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

    【讨论】:

    • 请注意 ROPC 流程的缺点joonasw.net/view/ropc-grant-flow-in-azure-ad
    • 是的。并且不推荐使用 ROPC 流程,因为您的密码将在请求中发送。换句话说,它不安全。
    • 谢谢,我会试一试。你说,“那么你可以得到一个这样的管理员令牌:”在那部分之后有什么遗漏吗?
    • @JoshSharkey 没有。没有任何遗漏。我的意思是你可以参考我的截图。有什么不清楚的地方吗?
    • 要添加的随机问题:服务帐户是否需要 office365 团队许可证才能发送消息?
    【解决方案2】:

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

    1) 一个是您可以使用Microsoft Bot Framework 创建一个机器人,并且一旦将该机器人安装到特定团队,它就可以发送“主动”消息(即,在 response 到用户的消息,而是在您需要时)。

    基本上,当您将 bot 添加到团队中时,您可以访问您的 bot 中的特定事件(OnMembersAdded 用于一般 bot,现在有一个仅适用于 Teams 的新事件)。在我对Detect bot application open event 的回答中查看更多信息。在这种情况下,您可以获得稍后需要的信息,您可以将其存储在数据库或任何地方,然后创建消息,就好像它是您的机器人发布到频道一样。您可以在 Programmatically sending a message to a bot in Microsoft Teams 上查看更多信息。

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

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

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

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多