首页 > 解决方案 > 使用 Microsoft Graph 创建日历事件:ErrorAccessDenied

问题描述

我一直在使用 curl 和 Outlook REST API v1.0(带有基本身份验证)在 Outlook 日历中创建日历事件。基本身份验证即将被弃用,因此我现在尝试使用 OAuth 2 迁移到 Microsoft Graph v1.0。我已经取得了一些进展,但在运行 POST 以创建事件时卡在“ErrorAccessDenied”。这是我到目前为止所做的:

  1. 在此处注册我的应用程序(curl):https ://apps.dev.microsoft.com/#/appList ,将 Application Permissions 设置为 Calendars.ReadWrite (并且,为了更好地衡量,Delegated Permissions 也设置为 Calendars.ReadWrite。)

  2. 使用上面步骤 1 中的客户端/应用程序 ID 和客户端密码/密码,我可以使用以下命令获取访问令牌:

curl -X POST -k -d "grant_type=client_credentials&client_id=[ApplicationID]&client_secret=[Password]&resource=https%3A%2F%2Fgraph.microsoft.com%2F" https://login.microsoftonline.com/[TenantID] /oauth2/令牌

  1. 然后我尝试使用以下命令创建一个事件,但得到下面的 ErrorAccessDenied 错误:

curl.exe -k -o "C:\Temp\output.txt" -X POST -H "Content-Type:application/json" -H "授权:承载 [TOKEN]" -d @"C:\Temp\ eventDetails.json" https://graph.microsoft.com/v1.0/users/[UserPrincipalName]/calendars/[CalendarID]/events ?$select=Id,lastModifiedDateTime

{ "error": { "code": "ErrorAccessDenied", "message": "访问被拒绝。检查凭据并重试。", "innerError": { "request-id": "38b802b9-08b9-4e0b-8f91 -66ef56c459f8", "日期": "2018-10-17T01:08:22" } } }

除了将注册应用程序的应用程序权限设置为 Calendars.ReadWrite (上面的第 1 步)之外,我对如何允许访问感到茫然。任何帮助将不胜感激。

谢谢你。

标签: oauth-2.0office365microsoft-graph-apioutlook-restapi

解决方案


对我有很大帮助的是使用 JWT 检查网站检查令牌,例如JWT.ms。本网站将向您解释有关令牌的所有详细信息(由 Microsoft 构建,令牌仅由 javascript 解析,不传输)。该网站还有一个声明选项卡,其中解释了令牌中的所有声明。

您正在谈论应用程序权限,这需要一个额外的步骤。它还必须得到 Azure AD 管理员的同意才能访问您要访问的目录。

您可以将其构建到登录流程中,但最简单的方法是通过 Azure 门户。

  1. 转到https://portal.azure.com -> Azure Active Directory -> [AD 名称] - 应用注册
  2. 找到您要授予访问权限的应用程序。
  3. 单击设置
  4. 单击所需权限
  5. 单击授予权限

这样做是在您的租户中创建一个具有您请求的权限的应用程序帐户。

在这些步骤之后,您应该创建一个新令牌并将其与您第一次获得的令牌进行比较,您应该能够看到更改。


推荐阅读