Json 无法通过REST API使用Microsoft Graph API更新用户配置文件

Json 无法通过REST API使用Microsoft Graph API更新用户配置文件,json,microsoft-graph-api,Json,Microsoft Graph Api,我试图在未经用户同意的情况下,通过服务器端(Java)应用程序通过Microsoft Graph API更新用户配置文件。 我在MS Azure中有一个应用程序,它具有以下“对其他应用程序的权限”:“Microsoft Graph-读取和写入所有用户的完整配置文件”作为“应用程序权限”,管理员已同意这些设置 因此,我可以从我们的租户那里获取任何用户配置文件。此外,通过“在所有邮箱中读取和写入日历”权限,我可以列出和修补用户的日历条目。但是,使用相同的代码来更新用户配置文件是行不通的 这是工作流的

我试图在未经用户同意的情况下,通过服务器端(Java)应用程序通过Microsoft Graph API更新用户配置文件。 我在MS Azure中有一个应用程序,它具有以下“对其他应用程序的权限”:“Microsoft Graph-读取和写入所有用户的完整配置文件”作为“应用程序权限”,管理员已同意这些设置

因此,我可以从我们的租户那里获取任何用户配置文件。此外,通过“在所有邮箱中读取和写入日历”权限,我可以列出和修补用户的日历条目。但是,使用相同的代码来更新用户配置文件是行不通的

这是工作流的REST表示形式

获取访问令牌:

POST https://login.microsoftonline.com/<my-tenant>/oauth2/token 
Content-Type: application/x-www-form-urlencoded

{
grant_type=client_credentials
&resource=https%3A%2F%2Fgraph.microsoft.com
&client_secret=<my-client-secret>
&client_id=<my-client-id>
}
POSThttps://login.microsoftonline.com//oauth2/token 
内容类型:application/x-www-form-urlencoded
{
授予\类型=客户端\凭据
&资源=https%3A%2F%2Fgraph.microsoft.com
&客户机密=
&客户识别码=
}
到目前为止还不错,补丁用户配置文件:

PATCH https://graph.microsoft.com/v1.0/<my-tenant>/users/<target-user>
Authorization: Bearer <access_token from prev response>
Accept: application/json
Content-Type: application/json

{"aboutMe": "happy"}
补丁https://graph.microsoft.com/v1.0//users/
授权:我应该设置“User.ReadWrite;User.ReadWrite.All;Directory.ReadWrite.All”范围,不幸的是,manage.windowsazure.com应用程序设置页面上没有这样的内容,但我相信“读取和写入所有用户的完整配置文件”应该可以做到这一点。

上面的示例请求用标记替换了一些数据,它们在正常工作流中被正确地填充。它非常适合修补日历事件(除了url中的微小更改外,几乎完全相同),但修补用户对象失败。

我也可以重现此问题

根据测试,问题与我们正在更新的特定字段(aboutMe)有关。当我使用目录.ReadWrite.All更新作业标题时,补丁用户API对我来说运行良好


如果您希望Microsoft Graph支持更新“关于电子邮件”字段,您可以从提交反馈。

Microsoft Graph当前对用户和组的操作有一些限制,具体取决于权限类型。根据该网站,您可以发现有一个限制:
不能对用户执行任何CRUD操作,除了更新用户高清照片和扩展配置文件属性
,用于
委托
应用
权限类型

选择
目录.ReadWrite.All
权限(
中的读取和写入目录数据
),如第节表格中的
可选
列所示,应该可以解决此问题

response code: 500
{
  "error": {
    "code": "-1, Microsoft.Office.Server.Directory.DirectoryObjectUnauthorizedAccessException",
    "message": "Attempted to perform an unauthorized operation.",
    "innerError": {
      "request-id": "<request-id>",
      "date": "2016-09-27T11:07:18"
    }
  }
}