使用MS Graph修改自身onPremisesExtensionAttributes所需权限咨询
问题:修改自身Microsoft配置文件的onPremisesExtensionAttributes时权限不足
我正在开发单页应用(SPA),尝试通过MS Graph调用以下接口修改自己的配置文件中的onPremisesExtensionAttributes:
PATCH https://graph.microsoft.com/v1.0/users/{my-user-id} Content-Type: application/json { "onPremisesExtensionAttributes" : { "extensionAttribute10" : "test" } }
但收到错误:
{ "error": { "code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation.", "innerError": { "date": "2023-03-10T08:33:10", "request-id": "1f20871c-e9f2-46df-bdce-21157212ef7a", "client-request-id": "1f20871c-e9f2-46df-bdce-21157212ef7a" } } }
当前应用已配置的委托权限:
https://graph.microsoft.com/User.Readhttps://graph.microsoft.com/User.ReadWrite
修改电话号码等其他属性可以成功,但仅修改extensionAttribute时出现权限问题。
更新:添加User.ReadWrite.All权限后可以成功,但我不希望允许应用编辑他人的配置文件,只想允许用户编辑自己的配置文件。
解决方案
onPremisesExtensionAttributes是从本地Active Directory同步到Azure AD的属性,这类属性的修改权限逻辑和普通用户属性不同:
- 默认的
User.ReadWrite委托权限仅支持修改用户自身的基础属性(如电话号码),无法修改这类同步过来的扩展属性。 User.ReadWrite.All权限虽然能解决问题,但会赋予应用编辑所有用户资料的权限,不符合需求。
更合适的权限是**Directory.AccessAsUser.All**委托权限:
- 该权限允许用户以自身身份访问和修改自己的目录对象属性,包含
onPremisesExtensionAttributes。 - 不会赋予应用编辑其他用户资料的权限,满足仅修改自身属性的需求。
操作步骤:
- 在Azure AD应用注册的「API权限」页面,添加
Directory.AccessAsUser.All委托权限。 - 由Azure AD管理员同意该权限(目录级权限需要管理员同意)。
- 使用该权限调用MS Graph API,建议使用
/me端点替代/users/{my-user-id},确保仅修改当前用户:
PATCH https://graph.microsoft.com/v1.0/me Content-Type: application/json { "onPremisesExtensionAttributes" : { "extensionAttribute10" : "test" } }
内容的提问来源于stack exchange,提问作者santal
相关产品推荐
相关产品推荐

