无法访问Microsoft Graph用户日历403

问题描述:

我看过其他帖子非常相似,但我没有找到真正的答案。有人说“它即将到来”,那些是旧的。无法访问Microsoft Graph用户日历403

我使用管理员凭证对我们的O365进行身份验证,并尝试提取日历信息。该范围包含Calendars.ReadWrite(属于App-Only和Delegate,直到范围),但它始终返回403. ErrorAccessDenied,“Access is denied。Check credentials and try again”

Calendar doc视图显示它可以在请求中发送给用户/ {id},并且当我列出所有用户时,该ID会回来。当然,如果我使用我的,它的作品。

如果这个相同的作用域名称确实存在一个App-Only范围与一个委托范围,那么您如何指定它?

是否有我必须在O365中为我的管理员用户指定所以它有权限?我可以在O365中使用该帐户删除或创建任何用户,因此看起来它应该具有它所需要的。

谢谢

所以,应用程序只有一个略有不同的流量。

首先,不是在“https://login.microsoftonline.com/common/oauth2/v2.0/authorize”处对用户进行身份验证,而是在“https://login.microsoftonline.com/common/adminconsent”处对其进行身份验证。

第二,你传入相同的参数减去“范围”。范围取决于您在apps.dev.microsoft.com上注册的应用程序中定义的应用程序权限。

第三,当你收到你的回调时,你将不会有一个“代码”用来检索你的访问刷新令牌。相反,您将收到“tenant”属性和“admin_consent”属性。 “admin_consent”会告诉你你是否有权利。第四,在请求访问令牌时,您不会提供“范围”或“代码”参数,但您将提供一个“资源”参数,其值为“https://graph.microsoft.com”。

最后,您联系以获取令牌的URL将从“https://login.microsoftonline.com/common/oauth2/v2.0/token”更改为“https://login.microsoftonline.com/ {tenant}/oauth2/token”,其中{tenant}将是返回的值。

请注意,在缺少“v2.0”的网址中。这不是一个错字。如果您不从路径中删除它,您将收到有关无效或缺少“范围”参数的错误。

一旦它成功返回您的访问和刷新令牌,该流程似乎遵循正常的委派访问。

下面是Microsoft给我的几个链接,以及他们的指导帮助解决这个问题。

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-scopes#using-the-admin-consent-endpoint

https://developer.microsoft.com/en-us/graph/docs/authorization/app_only

(非常感谢杰夫在微软)