当尝试在微软图表中列出“我”的目录项时,我收到400错误请求,并出现以下错误:“缺少必要的用户声明。”
重现的步骤:
Files.Read
使用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"
使用已创建的<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"
获得回复:
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"
}
}
}
非常感谢任何帮助
答案 0 :(得分:2)
在您的示例中,您仅对应用程序进行身份验证(称为“仅限应用程序的身份验证”,或者,在参考OAuth 2.0流程时,将其称为“客户端凭据授予”流程)。但是,您的请求明确指向用户(.../me/...
),即您。
对用户进行身份验证和授权的最常见(也是最完整)方法是调用授权代码授予流程,以获取和应用程序和用户的访问令牌。在此流程结束时获得的访问令牌将包括有关已登录用户的声明,并允许Microsoft Graph通过“我”了解您所指的是谁。来自the docs:
要授权您的应用,您必须先获得用户身份验证。您可以通过将用户重定向到Azure Active Directory(Azure AD)授权端点以及您的应用程序信息来登录其Office 365帐户。用户登录后,并同意您的应用请求的权限(如果用户尚未这样做),您的应用将收到获取OAuth访问令牌所需的授权码。
更多阅读: