我有一个守护进程服务,它使用用户的用户名/密码(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 的通知
但是,即使我尝试通过将上述订阅中的 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 获取订阅时,我收到了相同的错误消息。
在以下方面需要帮助:
- 要获得 user2 的订阅,需要进行哪些更改?
- 假设我可以获取 user1 的 access_token 然后我必须为 user1 和 user2 设置不同的订阅以便使用通用 access_token 获取通知是否正确?