无法使用 Microsoft Graph 更新个人资料照片 API

Can't update profilePhoto with Microsoft Graph API

我能够很好地检索个人资料照片,但在尝试更新照片时 运行 进入 ErrorAccessDenied。据此:

https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/profilephoto_update

User.ReadWrite 权限应该足够了。我已经使用 manage.windowsazure.com 为我的应用程序分配了此权限(并且还尝试授予各种其他权限),但仍然出现错误。这是我授予该应用程序的当前权限集:

Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All email Group.Read.All Group.ReadWrite.All MailboxSettings.ReadWrite offline_access profile User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All

我正在使用 client_credentials 流程获取 Bearer 令牌,如下所示:

curl -d grant_type=client_credentials \
     -d client_id=CLIENT_ID \
     -d client_secret=CLIENT_SECRET
     -d resource=https://graph.microsoft.com \
     https://login.microsoftonline.com/DOMAINNAME/oauth2/token

然后我尝试像这样更新个人资料照片:

curl -H "Authorization: Bearer BEARERTOKEN" \
     --request PATCH \
     -H "Content-Type: image/jpeg" \
     -d @photo.jpg
     https://graph.microsoft.com/v1.0/users/USERPRINCIPALNAME/photo/$value

我收到以下错误:

{
  "error": {
    "code": "ErrorAccessDenied",
    "message": "Access is denied. Check credentials and try again.",
    "innerError": {
      "request-id": "REQUESTID",
      "date": "2016-05-23T16:42:21"
    }
  }
}

您似乎列出了为您的应用配置的 delegated 权限,但使用客户端凭据流程检索了令牌,该流程使用单独的 application 权限。根据您引用的文档页面,更新用户个人资料照片所需的范围是 User.ReadWrite。这不能通过仅应用范围完成,包括 User.ReadWrite.All。可以使用授权码授予流程更新用户照片(参见 https://graph.microsoft.io/en-us/docs/authorization/app_authorization