首页 > 解决方案 > Microsoft Graph API - 从共享邮箱获取消息 - 禁止错误

问题描述

我有一个守护进程服务,它使用用户的用户名/密码(user1@domain.com)[使用 Microsoft.Identity.Client.PublicClientApplication & 然后使用 AcquireTokenByUsernamePasswordAsync 获取访问令牌)获取 access_token。

Azure 应用程序的范围为“Mail.Read”并且已授予委派权限(不需要管理员同意)

我可以成功获得 user1@domain.com 邮箱的订阅,从而收到邮件通知。

我正在使用 Graph 客户端进行订阅。

var subscription = new Subscription
 {
   Resource = "users/user1@domain/mailFolders('Inbox')/messages",
   ChangeType = "created",
   NotificationUrl = "NotificationUrl",
   ClientState = Guid.NewGuid().ToString(),
   ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 15, 0) 
  };

user2@domain.com 已将其邮箱共享给 user1@domain.com。在 azure 应用程序上,我添加了“Mail.Read.Shared”的范围,并确保单击授予权限(再次不需要管理员同意)。

但是,即使在此之后,我也只收到 user1@domain.com 而不是 user2@domain.com 的通知

然后我偶然发现了https://github.com/microsoftgraph/microsoft-graph-docs/blob/master/concepts/outlook-share-messages-folders.md

但是,即使我尝试通过将上述订阅中的 Resource 属性更改为“users/user2@domain/mailFolders('Inbox')/messages”来获取订阅 - 我收到以下错误

代码:扩展错误消息:操作:创建;例外:[状态代码:禁止;原因:禁止]

有趣的是,如果我使用使用上述指定方式收到的 access_token 向 Postman 上的以下 url 发起获取请求,我可以阅读共享邮箱的邮件!(https://graph.microsoft.com/v1.0/users/user2@domain.com/mailFolders('收件箱')/messages)

此外,当我在修改权限并同意 Mail.Read.Shared 后在图形浏览器上尝试相同的操作时,我可以阅读邮件。

但是,当我尝试使用 Postman 获取订阅时,我收到了相同的错误消息。

在以下方面需要帮助:

  1. 要获得 user2 的订阅,需要进行哪些更改?
  2. 假设我可以获取 user1 的 access_token 然后我必须为 user1 和 user2 设置不同的订阅以便使用通用 access_token 获取通知是否正确?

标签: microsoft-graph-apimicrosoft-graph-sdks

解决方案


推荐阅读