首页 > 解决方案 > 从机器人代码调用 MS Teams Graph API 导致 403 Request Forbidden

问题描述

我有一个添加了 Cortana 频道的机器人。我已配置 Cortana 连接帐户以获取 Graph API 的访问令牌。我的机器人代码正在使用这个令牌来调用 MS Teams API。

Cortana 正确调用我的技能机器人并提示用户登录。成功登录后,我已在代码中验证我正在获取访问令牌。使用此令牌,当我的机器人代码调用 时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 通道 Oauth 设置范围内以及 Azure 门户中的应用内设置了以下权限:

通过具有相同登录凭据的图形资源管理器进行的相同调用会返回我加入的团队的列表。

我在这里想念什么?我该如何进一步调试?

在此处输入图像描述

标签: c#microsoft-graph-apimicrosoft-teams

解决方案


在您可以使用某些权限范围之前,您需要先获得“管理员同意”。请注意,这是与“用户同意”不同的过程。管理员同意在用户同意之前,并且实际上是管理员说“当然,我的租户中的用户可以接受您的应用程序要求的范围”。您可能会发现这篇关于理解用户同意和管理员同意之间区别的文章很有帮助。

您如何执行 Admin Consent 取决于您的应用程序。如果您是一个多租户应用程序(即您的应用程序被不同的组织使用),那么您需要向每个租户的管理员提供一个特定的 URI 以启动该过程。对于此过程,我建议您查看为您的应用程序获取行政同意书

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


推荐阅读