从Microsoft Teams获取所有消息

时间:2020-05-27 12:52:30

标签: api graph microsoft-graph-sdks microsoft-graph-teams

我正在尝试从租户中的Microsoft Teams获取所有消息,我已将应用程序注册到Azure,设置了正确的权限并磨碎了管理员特权。

让我感到困惑的是创建GraphServiceClient。 我的应用程序更像是守护程序应用程序。 如果有人能给我一个如何正确创建客户端的示例,我将不胜感激。

到目前为止,这是我的代码:

            string[] graphScopes = { "https://graph.microsoft.com/.default" };
            IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
            .Create("x")
            .WithTenantId("x")
            .WithClientSecret("x")
            .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(app);
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            try
            {
                var messages = await graphClient.Teams["x"].Channels["x@thread.skype"].Messages.Request().GetAsync();
                Console.ReadLine();
                foreach(var item in messages)
                {
                    Console.WriteLine(item.Body);
                }
            }
            catch(Exception e)

            {
                Console.WriteLine(e.Message);
                Console.Read();
            }

无论我尝试得到什么,我都会遇到以下错误 代码:UnknownError内部错误:AdditionalData:请求ID:x日期:2020-05-27T14:22:37 ClientRequestId:x

更新:我可以从API中获得某些东西,我的权限错误。 仍然无法收到消息, 我拥有所有这些许可: ChannelMessage.Read.All,Group.Read.All,Group.ReadWrite.All 我可能缺少“ ChannelMessage.Read.Group(RSC)”权限,但在权限页面中找不到它。

2 个答案:

答案 0 :(得分:0)

您的问题是您正在访问"beta" api,但使用的是生产基础URL路径。

您需要的许可是以下任意一项(即是否许可):

  • ChannelMessage.Read.Group(RSC)或
  • ChannelMessage.Read.All或
  • Group.Read.All或
  • Group.ReadWrite.All

由于您拥有Group.Read.All,因此您只需拥有权限即可。

您需要做的是将基本URL更改为beta API:

graphClient.BaseUrl = "https://graph.microsoft.com/beta";

已更新:

由于您现在说的是“禁止”错误,因此我认为您也有同意问题。

我的猜测是您在一个租户上创建并同意了您的应用,但您正在尝试访问另一个租户中的数据。这将为您提供禁止的错误。也就是说,您创建并同意了一个dev azure帐户租户,并正在尝试访问您的工作租户。

如果是这种情况,您需要: *确保将您的天蓝色应用设置为multi-tenanted *您必须由目标租户获得您的应用consented

如果您这样做并使用beta端点,我希望您的示例代码将开始工作。

Update2:

最后,我尝试使用上面的应用程序上下文来处理消息列表,并且我从beta api中也遇到了相同的Forbidden错误。从用户上下文来看,它工作正常。因此,您的答案将是使用用户上下文而非应用程序上下文来访问此API。

看起来您击中的是Protected API。因此,如果您想从应用程序上下文中使用此API,则必须提交请求以允许对其进行访问。

答案 1 :(得分:0)

也许这是解决方案或问题;-)

Microsoft Graph 中访问敏感数据的 Microsoft Teams API 被视为受保护的 API。这些 API 要求您在使用之前进行额外的验证,超出许可和同意的范围。

https://docs.microsoft.com/en-us/graph/teams-protected-apis