如何通过REST从应用程序正确创建团队消息

问题描述

我有一个c#服务,该服务在没有用户界面的蔚蓝云中某处运行。一些特定的事件应该触发向团队频道发送新消息。

根据本文档,仅受委托帐户支持创建消息https://docs.microsoft.com/en-us/graph/api/channel-post-messages?view=graph-rest-1.0&tabs=http,而应用程序令牌不支持

如何在没有特定用户帐户且云中没有登录界面的情况下为我的服务应用程序创建委托令牌? 哪个身份验证提供者是正确的? https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?context=graph%2Fapi%2F1.0&view=graph-rest-1.0&tabs=CS

解决方法

正如您在问题chatMessage中提到的那样,仅支持委派权限类型。

委派权限类型到底是什么? 一种权限,使用登录的委托授权来指定基于范围的访问。 强调这一点的原因是-对于委派权限,我们需要一个用户帐户

回到您的问题:

如何在没有特定用户帐户的情况下为我的服务应用程序创建委托令牌

您可以在没有特定用户帐户的情况下获得令牌,但这无济于事。为了解决这个问题,我建议创建一个服务帐户-该帐户拥有团队的权限。此问题的第二部分建议哪个提供商可以在没有登录提示的情况下提供帮助。

步骤包括:

  • 注册您的应用。
  • 在您的应用上配置Microsoft Graph的权限。
  • 获得管理员同意。
  • 获取访问令牌。
  • 使用访问令牌来调用Microsoft Graph。

有关这些步骤的详细信息,请参见此处的文章:https://docs.microsoft.com/en-us/graph/auth-v2-service

云中没有登录界面

现在您可以使用以下选项:

enter image description here Microsoft identity platform and OAuth 2.0 Resource Owner Password Credentials

在此提供程序中,您将通过服务帐户的凭据。

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

client_id=<YOUR CLIENT ID>
&scope=user.read%20openid%20profile%20offline_access
&username=<YOUR USERNAME>
&password=<YOUR PASSWORD>
&grant_type=password

您可以通过上述请求为您的服务帐户生成令牌,应用程序可以使用chatMessage API。