使用 Microsoft Graph 创建日历事件:ErrorAccessDenied

Create calendar event using Microsoft Graph: ErrorAccessDenied

我一直在使用 curl 和 Outlook REST API v1.0(使用基本身份验证)在 Outlook 日历中创建日历事件。基本身份验证很快就会被弃用,所以我现在正尝试使用 OAuth 2 迁移到 Microsoft Graph v1.0。我已经走了一些路,但是当 运行 [=60] 时,我被困在 "ErrorAccessDenied" =] 创建事件。这是我到目前为止所做的:

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

  2. 使用上面第 1 步中的 client/application ID 和客户端 secret/password,我可以使用以下命令获取访问令牌:

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/token

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

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

{ "error":{ "code": "ErrorAccessDenied", "message": "Access is denied. Check credentials and try again.", "innerError":{ "request-id": "38b802b9-08b9-4e0b-8f91-66ef56c459f8", "date":“2018-10-17T01:08:22” } } }

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

谢谢。

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

你说的是应用程序权限,这需要一个额外的步骤。它还必须得到 Azure AD 管理员对你要访问的目录的同意。

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

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

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

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