从Microsoft团队获取所有消息



我正在尝试从租户中的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();
}

无论我尝试获得什么,我都收到以下错误 代码:未知错误内部错误:附加数据:请求 ID:x 日期:2020-05-27T14:22:37 ClientRequestId:x

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

这可能是解决方案或问题 ;-)

Microsoft图中访问敏感数据的Microsoft Teams API 被视为受保护的 API。这些 API 要求你先进行除权限和同意之外的其他验证,然后才能使用它们。

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

您的问题是您正在访问"测试版"API,但使用的是生产基地网址路径。

您需要的权限是以下任何一项(即或不是和):

  • ChannelMessage.Read.Group (RSC) 或
  • ChannelMessage.Read.All OR
  • 组.读取.全部或
  • 组.读写.全部

由于您有 Group.Read.All,这就是您获得权限所需的全部内容。

您需要做的是将基本 URL 更改为测试版 api:

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

更新:

既然现在你说你收到一个"禁止"错误,我想你也有同意问题。

我的猜测是,你在一个租户上创建并同意了你的应用程序,但你正在尝试访问另一个租户中的数据。 这将为您提供禁止的错误。即,你在开发 Azure 帐户租户上创建并同意,并正在尝试访问工作租户。

如果是这种情况,您需要: * 确保将 Azure 应用设置为多租户 * 你必须获得目标租户的同意

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

更新2:

终于开始尝试使用像上面这样的应用程序上下文来执行消息列表,我也从 beta API 中收到相同的禁止错误。 从用户上下文来看,它工作正常。 因此,您的答案是使用用户上下文而不是应用程序上下文来访问此 API。

看起来您正在点击的是受保护的 API。 因此,如果要从应用程序上下文使用此 API,则必须提交请求才能允许访问它。

最新更新