2016-09-27 96 views
0

我试图在未经用户许可的情况下通过服务器端(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中的轻微更改外),但无法修补用户对象

回答

0

我也可以重现这个问题

根据测试,问题是相对于具体的领域(aboutMe)我们正在更新。当我使用Directory.ReadWrite.All更新jobTitle时,补丁用户API适用于我。

如果您希望Microsoft Graph支持更新aboutMe字段,您可以提交here的反馈。

1

Microsoft Graph对用户和组的操作目前有一些限制,具体取决于权限类型。根据网站Known issues您可以发现有一个限制:Cannot perform any CRUD operations on User other than updating user HD photo and extended profile propertiesDelegatedApplication权限类型。

选择Directory.ReadWrite.All许可(Read and write directory datanew Azure portal),如在表AlternativeMicrosoft Graph permissions部分所指出的,应该解决的问题。

相关问题