【问题标题】:Failed to update user profile with Microsoft Graph API via REST API无法通过 REST API 使用 Microsoft Graph API 更新用户配置文件
【发布时间】:2019-04-02 20:00:14
【问题描述】:

我试图在未经用户同意的情况下通过服务器端 (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>
}

到目前为止一切顺利,修补用户配置文件:

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 中的细微更改之外几乎完全相同),但无法修补用户对象。

【问题讨论】:

    标签: json microsoft-graph-api


    【解决方案1】:

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

    选择Directory.ReadWrite.All 权限(new Azure portal 中的Read and write directory data),如Microsoft Graph permissions 部分表中的Alternative 列所示,应该可以解决问题。

    【讨论】:

      【解决方案2】:

      我也可以重现这个问题。

      根据测试,问题与我们正在更新的特定字段(aboutMe)有关。当我使用 Directory.ReadWrite.All 更新 jobTitle 时,补丁用户 API 非常适合我。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 2016-09-20
        • 2019-12-03
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多