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

时间:2018-10-17 02:32:14

标签: oauth-2.0 office365 microsoft-graph outlook-restapi

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

  1. 在以下位置注册了我的应用程序(curl):https://apps.dev.microsoft.com/#/appList,将“应用程序权限”设置为Calendars.ReadWrite(以及(为了很好的目的,也将“代理权限”设置为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/token

  1. 然后我尝试使用以下命令创建事件,但在下面显示ErrorAccessDenied错误:

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

{   “错误”:{     “ code”:“ ErrorAccessDenied”,     “ message”:“访问被拒绝。请检查凭据,然后重试。”,     “ innerError”:{       “ request-id”:“ 38b802b9-08b9-4e0b-8f91-66ef56c459f8”,       “ date”:“ 2018-10-17T01:08:22”     }   } }

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

谢谢。

1 个答案:

答案 0 :(得分:1)

对我最大的帮助是使用JWT检查网站(例如JWT.ms)检查令牌。该网站将向您解释有关令牌的所有详细信息(它是由Microsoft构建的,令牌仅由javascript解析且不会传输)。该网站还具有索赔标签,在其中解释了令牌中的所有声明。

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

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

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

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

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