c# - 从机器人代码调用 MS Teams Graph API 会导致 403 请求被禁止

标签 c# microsoft-graph-api microsoft-teams

我有一个添加了 Cortana channel 的机器人。我已配置 Cortana 连接帐户以获取 Graph API 的访问 token 。我的机器人代码使用此 token 来调用 MS Teams API。

Cortana 正确调用我的技能机器人并提示用户登录。成功登录后,我已在代码中验证我正在获取访问 token 。使用此 token ,当我的机器人代码调用 https://graph.microsoft.com/v1.0/me/joinedTeams 时,我会得到响应:

{
  StatusCode: 403, 
  ReasonPhrase: 'Forbidden', 
  Version: 1.1, 
  Content: System.Net.Http.StreamContent, 
  Headers: {  
      Transfer-Encoding: chunked  
      request-id: b1f83dda-1ce4-4660-9950-d890123f5b27  
      client-request-id: b1f83dda-1ce4-4660-9950-d890123f5b27  
      x-ms-ags-diagnostic: {
          "ServerInfo":{
              "DataCenter":"West US",
              "Slice":"SliceC",
              "Ring":"5",
              "ScaleUnit":"003",
              "Host":"AGSFE_IN_4",
              "ADSiteName":"WUS"
            }
        }  
        Duration: 43.0296  
        Strict-Transport-Security: max-age=31536000  
        Cache-Control: private  
        Date: Wed, 23 Jan 2019 20:13:33 GMT  
        Content-Type: application/json
    }
}

我已在 Cortana channel Oauth 设置范围以及 Azure 门户中的应用内设置了以下权限:

  • Mail.Read
  • 邮件发送
  • openid
  • 个人资料
  • 用户.Read
  • User.ReadBasic.All
  • 用户.Read.All
  • User.ReadWrite.All
  • Group.Read.All
  • Group.ReadWrite.All(委托(delegate) + 应用程序)

使用相同的登录凭据通过图形浏览器进行相同的调用会返回我加入的团队的列表。

我在这里缺少什么?我该如何进一步调试?

enter image description here

最佳答案

在使用某些权限范围之前,您需要先获得“管理员同意”。请注意,这是一个与“用户同意”不同的过程。管理员同意先于用户同意,并且实际上是管理员说“当然,我的租户中的用户可以接受您的应用程序要求的范围”。您可以在 understanding the difference between User and Admin Consent 上找到这篇文章有帮助。

如何执行管理员同意在一定程度上取决于您的应用程序。如果您是 Multi-Tenancy 应用程序(即您的应用程序被不同组织使用),那么您需要向每个租户的管理员提供特定的 URI 来启动该流程。对于这个过程,我建议看一下 Obtaining Administrative Consent for your application .

如果您是单租户应用程序(即内部企业应用程序),那么事情会更简单一些。租户管理员只需从Azure portal中的申请注册页面单击“授予同意”选项即可。 (可以在您的应用程序的“API 权限”页面上找到)。

关于c# - 从机器人代码调用 MS Teams Graph API 会导致 403 请求被禁止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54335179/

相关文章:

c# - 在这种情况下我应该如何处理无效的用户输入?

Azure Active Directory 组增量 API

azure - 如何在Microsoft graph api中识别事件属于哪个日历?

json - Elasticsearch 观察器和 Microsoft Teams webhook

c# - 如何取消共享共享打印机?

c# - 需要检查两个 View 模型的类型以查看它们是否源自同一基础

microsoft-graph-api - 如何知道收件箱是哪个mailFolder?

botframework - 如何发送 1 :1 welcome message?

powershell - 使用 MS Graph(或 PowerShell)创建 MS Teams 聊天

c# - Azure 环境上的 ConfigurationManager