没有登录用户的Microsoft Graph Access邮箱

时间:2020-05-08 19:08:48

标签: c# microsoft-graph-api msal

我已遵循客户端凭据流来获取客户端访问令牌。该令牌与具有Mail.ReadWrite权限的应用程序绑定。根据Microsoft的权限参考here,我不需要用户来获取所有邮箱。我看不到单个端点,该端点允许我在没有关联用户的情况下拉邮箱。如何获得我的应用程序也可以访问而又不查询用户的邮箱列表?我编写的代码是用C#语言编写的,并且使用MSAL.NET和ms-graph API,尽管我尝试通过在API外部发送原始命令来使用其余API。

3 个答案:

答案 0 :(得分:0)

您确实具有正确的权限,如mail.readwrite graph api权限确实授予您读取所有邮箱的权限。 邮箱绑定到用户或组。因此您需要列出所有用户或所有组。但这并不能保证邮箱也存在。 您可以对包含许可证的Beta端点进行图形调用,并按包含交换的分配计划进行过滤。对我来说,这将是最优雅的解决方案。 除非有人有更好的主意。 我知道您可以列出所有用户,然后再打个电话,以检查邮箱设置或日历是否存在,但是我觉得不太优雅。

无论哪种方式,您都必须查询用户或组,因为没有诸如没有用户或o365组的邮箱之类的东西。

答案 1 :(得分:0)

The Microsoft Graph API supports accessing data in users' primary and shared mailboxes,但未列出给定用户或所有用户的所有邮箱,可以使用Exchange Powershell完成。

话虽如此,您可以针对每个用户执行以下操作:

List messages

GET /me/messages
GET /users/{id | userPrincipalName}/messages

List mail folders

GET /me/mailFolders
GET /users/{id | userPrincipalName}/mailFolders

以及其他Common use cases中包含的内容。

最后尝试使用特权最小的权限。 Mail.ReadWrite具有很高的特权。

答案 2 :(得分:0)

您不能拥有一个用户class MyActivator extends ResourceActivator(ctx => for { res1 <- someResource res2 <- anotherResource _ <- Resource.make(doSomeStuff.start)(_.cancel) } yield () ) id。访问给定邮箱的模式为userPrincipalName。在不知道您要寻址的用户的情况下,Graph无法将您的呼叫路由到正确的邮箱。

无论您的应用需要哪种权限,如果您要访问用户数据,也应该请求https://graph.microsoft.com/v1.0/users/{id|upn}/messages。与该用户数据进行交互的每个呼叫几乎都需要一个用户User.Read.Allid作为该呼叫的一部分。

请记住,Exchange数据可以与用户和组都关联,因此您可能还需要请求userPrincipalName