"Access denied" 通过 Microsoft Graph 创建文件夹时

"Access denied" When making a folder via Microsoft Graph

尝试在 SharePoint 站点中创建文件夹时出现以下错误:

{
  "error": {
    "code": "accessDenied",
    "message": "Access denied",
    "innerError": {
      "request-id": "61d3b5aa-857e-4ee2-9d0d-51d235ca7c5f",
      "date": "2020-05-18T06:31:54"
    }
  }
}

备注:

  1. 使用 Microsoft Graph 资源管理器时,请求有效。
  2. 对 Graph 端点的其他请求有效。
  3. 我用 msgraph-sdk-php 提出请求。
  4. 这通常与权限有关,但我的用户具有以下权限 天蓝色的权限设置:

    Sites.Manage.All    Delegated.
    Sites.Read.All      Delegated.
    Sites.ReadWrite.All Delegated.
    
  5. 里面my.env我有以下权限:

    OAUTH_SCOPES='openid profile offline_access user.read calendars.readwrite mail.readwrite mail.send'
    
  6. Url:

     https://login.microsoftonline.com/common/oauth2/v2.0/authorize?%20state={someState}%20&scope=openid%20profile%20offline_access%20user.read%20calendars.readwrite%20mail.readwrite%20mail.send%20&response_type=code&approval_prompt=auto&redirect_uri=http://localhost:8080/office365/token/store%20&client_id={myclientId}
    

是什么导致了这里的错误?

您可能已经请求了这些权限,但在您从管理员那里收到 "consent" 之前,它们不会被激活。

AAD 有两种形式 "consent":Admin 和 User。如果范围需要管理员同意,那么您需要先获得该同意 ,然后才能 获得用户同意。您列出的所有 Sites.*.All 范围都需要管理员同意。

您可以从 Understanding Azure AD application consent experiences

找到更多关于同意(以及如何获得)的详细信息

您需要构建特殊的 url 并将其交给全局管理员同意。 这是示例:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-admin-consent

完成同意后,最多可能需要 24 小时才能获得许可。 此外,您可以在此处检查 oauth 令牌:https://jwt.io/

您需要在 OAUTH_SCOPES 变量中添加一个或多个所需范围(Sites.Read.All、Sites.ReadWrite.All、Sites.Manage.All):

OAUTH_SCOPES='Sites.Manage.All ...'

这样你的授权URL就是这样建立的:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=Sites.Manage.All ...&client_id=...

PS: None 的上述范围需要 admin consent.