我们有一个使用User.ReadWrite.All权限范围来更新用户属性的应用。我们使用客户端凭据流(也称为app-only)来使用这些请求的图表进行身份验证。
昨天我们发现我们可以为用户提供PATCH postalCode而不会出现问题,但我们无法使用PATCH mobilePhone。我们会得到Authorization_RequestDenied
。
E.g。请求:
PATCH https://graph.microsoft.com/v1.0/myorganization/users/6c778de7-e2d1-4561-9ecf-2f8bdc8b4ebd
{
"mobilePhone": "+1 33164339301"
}
在Authorization标头中包含有效的承载令牌,其中包含以下有效内容(我为租户和应用程序编辑了ID):
{
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/<REDACTED>/",
"iat": 1520381940,
"nbf": 1520381940,
"exp": 1520385840,
"aio": "<REDACTED>",
"app_displayname": "<REDACTED>",
"appid": "<REDACTED>",
"appidacr": "1",
"idp": "https://sts.windows.net/<REDACTED>/",
"oid": "<REDACTED>",
"roles": [
"User.ReadWrite.All"
],
"sub": "<REDACTED>",
"tid": "<REDACTED>",
"uti": "<REDACTED>",
"ver": "1.0"
}
响应:
{
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "da640831-a28c-4c66-aa74-8eebede64fc7",
"date": "2018-03-07T00:34:43"
}
}
}
请注意,JWT包含User.ReadWrite.All,它需要管理员同意并且应该能够更新用户属性。
但是,使用完全相同的JWT,我能够使用PATCH postalCode。
有问题的用户看起来不像是在本地同步,因为用户会出现以下情况:
"onPremisesImmutableId": null,
"onPremisesLastSyncDateTime": null,
"onPremisesProvisioningErrors": [],
"onPremisesSecurityIdentifier": null,
"onPremisesSamAccountName": null,
"onPremisesSyncEnabled": null,
"onPremisesUserPrincipalName": null,
旁注:(不确定是否有帮助)但如果我使用mobilePhone的当前值进行PATCH,则会得到204响应,而不是403.
是否还有其他因素会妨碍mobilePhone被修补?
更新:这是图表团队确认的错误,现已修复。您现在应该能够正确修补mobilePhone。