【问题标题】:Graph API update user.preferredLanguage not working because of insufficient privilegesGraph API 更新 user.preferredLanguage 由于权限不足而无法正常工作
【发布时间】:2019-02-28 03:21:06
【问题描述】:

我正在尝试使用 /me 端点或 /users/{currentUserID} 端点更新用户的首选语言,但这总是抛出:

403 "权限不足,无法完成操作。"

我已经根据documentation page检查了权限并添加了User.ReadWrite、User.ReadWrite.All、Directory.ReadWrite.All、Directory.AccessAsUser.All的权限 。这似乎没有任何效果。文档不正确还是缺少权限?

如果我使用 azure 广告管理员用户执行该请求,则该请求可以正常工作。

编辑:2019-04-18

我做了更多测试:

  1. 我使用https://demos.microsoft.com 创建了一个新的演示租户
  2. 我使用租户管理员帐户登录图形资源管理器,并同意 User.ReadWrite(以及图形资源管理器要求的其他默认权限)的管理员。
  3. 我使用演示用户登录。
  4. 我使用https://graph.microsoft.com/v1.0/me/ 上的补丁将首选语言 设置为“en-US”。 这很成功
  5. 我尝试再次将语言更改为“de-DE”。 这不起作用

"message": "权限不足,无法完成操作。", “内部错误”:{ “请求 ID”:“d1d30483-a3da-4775-af5b-4a3dd9823f11”, “日期”:“2019-04-18T07:40:27” }

因此,第一次设置语言时它似乎可以工作。但是以后更新是不可能的。

【问题讨论】:

  • 你什么时候添加这些权限的?当您添加权限时,请尝试注销并再次登录,关闭浏览器和所有这些东西......然后再次尝试重新登录。您还可以检查解码令牌的json Web令牌权限(例如jsonwebtoken.io)。
  • 我关闭了浏览器,然后以私密模式启动。没有帮助。
  • 令牌看起来不错:"scp": "... Directory.AccessAsUser.All Directory.ReadWrite.All Files.ReadWrite.All Group.ReadWrite.All IdentityRiskEvent.Read.All Mail.ReadWrite MailboxSettings .ReadWrite Notes.ReadWrite.All openid People.Read profile Reports.Read.All Sites.ReadWrite.All Tasks.ReadWrite User.ReadBasic.All User.ReadWrite User.ReadWrite.All email",
  • 好吧,那我不知道 :( 至少目前......也许是一个错误,是另一个权限......

标签: microsoft-graph-api


【解决方案1】:

既没有文档问题,也没有缺少图表权限。您需要检查 azure AD 中的 permission,而不仅仅是 Graph Exploer。我的测试基于两个帐户(一个 MS 帐户和一个试用帐户 test@xx.onmicrosoft)。试用版运行良好,而 MS 帐户则不行。

在组织内,登录用户的权限可能是 由一个或多个管理员的政策或成员身份决定 角色。有关管理员角色的详细信息,请参阅Assigning administrator roles in Azure Active Directory

根据测试文档,并非所有用户都可以更改所有配置文件数据,某些数据受到组织政策的限制,Grape Scopes 设置无法忽略这些数据。

对于工作案例,Directory.AccessAsUser.All 不是必需的

【讨论】:

  • 但问题不在于更新所有其他用户的语言,而只是更新当前用户的语言。更新您自己的属性不需要管理员角色。您的第一个超链接中的文章甚至说:例如,假设您的应用已被授予 User.ReadWrite.All 委派权限。 [...] 但是,如果登录用户不是管理员角色,您的应用将只能更新登录用户的个人资料。 编辑:您的第二个超链接是不工作。
  • 我不同意你的看法。许多公司都有安全策略,最终用户不能修改自己的用户配置文件,除了电话。其他信息由 HR/Admin 控制(许多大公司都遵循此规则)。第二个超链接已修复。所以即使用户登录,也不意味着用户可以修改个人资料。
  • 一些基于理想环境的文档,如果广告(或aad)上有一些组策略,登录的非管理员用户无法更改许多属于自己的信息。这对信息安全很有意义。
  • 但是这个租户是开发租户。没有公司规则或任何限制设置用户属性的东西。此外,用户可以在 O365“我的帐户”>“设置”中更改语言
  • 根据开发租户和实际公司帐户的测试结果,我的结果是再次检查AD设置。如果您确定您的广告设置没问题,我认为您可以在 Github 中将此报告为问题/错误。 API 本身应该没问题。 "此外用户可以在O365的“我的账户”>“设置”中更改语言,UI上的操作支持可能不支持Graph API。
【解决方案2】:

只是为了关闭这个问题: 我与 Microsoft 支持进行了一些测试。出于某种原因,只有在应用具有 Directory.AccessAsUser.All 时才能更新 preferredLanguage

仅更新用户语言的权限相当大...

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 2017-11-03
    • 2018-01-24
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多