Microsoft Graph无法列出目录文件

时间:2016-05-31 14:53:48

标签: office365 office365api microsoft-graph office365-restapi

当尝试在微软图表中列出“我”的目录项时,我收到400错误请求,并出现以下错误:“缺少必要的用户声明。”

重现的步骤:

  1. 通过Application Registration Tool 创建应用,授予Files.Read
  2. 权限
  3. 使用create Client ID和Client Secret获取令牌(在guide之后)cURL:

    curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&client_id=<client-id>&client_secret=<client-secret>=&resource=https://graph.microsoft.com' "https://login.microsoftonline.com/<my-tenant-id>/oauth2/token"

  4. 使用已创建的<Access-Token>发出请求以列出根目录,如(cURL):

    curl -X GET -H "Authorization: Bearer <Access-Token>" -H "Cache-Control: no-cache" "https://graph.microsoft.com/v1.0/me/drive/root/children"

  5. 获得回复:

    400 Bad Request  
    {
      "error": {
        "code": "BadRequest",
        "message": "Missing necessary user claims.",
        "innerError": {
          "request-id": "36c384f4-1810-4d96-ad69-d69a67d11ece",
          "date": "2016-05-31T14:39:05"
        }
      }
    }
    

    非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

在您的示例中,您仅对应用程序进行身份验证(称为“仅限应用程序的身份验证”,或者,在参考OAuth 2.0流程时,将其称为“客户端凭据授予”流程)。但是,您的请求明确指向用户(.../me/...),即您。

对用户进行身份验证和授权的最常见(也是最完整)方法是调用授权代码授予流程,以获取应用程序和用户的访问令牌。在此流程结束时获得的访问令牌将包括有关已登录用户的声明,并允许Microsoft Graph通过“我”了解您所指的是谁。来自the docs

  

要授权您的应用,您必须先获得用户身份验证。您可以通过将用户重定向到Azure Active Directory(Azure AD)授权端点以及您的应用程序信息来登录其Office 365帐户。用户登录后,并同意您的应用请求的权限(如果用户尚未这样做),您的应用将收到获取OAuth访问令牌所需的授权码。

更多阅读: