无法通过REST API使用Microsoft Graph API更新用户配置文件
我试图在未经用户许可的情况下通过服务器端(Java)应用程序通过Microsoft Graph API更新用户配置文件。 我在MS Azure中的应用程序,它具有以下“权限到其他应用程序‘:’微软图表 - 读写所有用户的全部资料”为“应用程序许可”,管理员必须使用这些设置同意。无法通过REST API使用Microsoft Graph API更新用户配置文件
因此,我可以从我们的租户获取任何用户配置文件。此外,使用“读取和写入所有邮箱中的日历”权限,我可以列出并修补用户的日历条目。使用相同的代码snipets更新用户配置文件不起作用。
这里是工作流程的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>
}
到目前为止好,打补丁的用户配置文件:
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"}
和响应是:
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"
}
}
}
根据http://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_update文档,我应该设置“User.ReadWrite; User.ReadWrite.All; Directory.ReadWrite.All“示波器,不幸的是,在manage.windowsazure.com应用程序设置页面上没有这样的事情,但我相信”读写所有用户的完整配置文件“应该做到这一点 上面的示例请求有一些数据替换为<>标记,它们在正常工作流程中被正确填充,它完美地用于修补日历事件(几乎完全相同,除了url中的轻微更改外),但无法修补用户对象
我也可以重现这个问题
根据测试,问题是相对于具体的领域(aboutMe)我们正在更新。当我使用Directory.ReadWrite.All更新jobTitle时,补丁用户API适用于我。
如果您希望Microsoft Graph支持更新aboutMe字段,您可以提交here的反馈。
Microsoft Graph对用户和组的操作目前有一些限制,具体取决于权限类型。根据网站Known issues您可以发现有一个限制:Cannot perform any CRUD operations on User other than updating user HD photo and extended profile properties
为Delegated
和Application
权限类型。
选择Directory.ReadWrite.All
许可(Read and write directory data
在new Azure portal),如在表Alternative
列Microsoft Graph permissions部分所指出的,应该解决的问题。