无法使用Microsoft Graph API更新profilePhoto

时间:2016-05-23 16:48:27

标签: office365 microsoft-graph

我能够很好地检索个人资料照片,但在尝试更新照片时会遇到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"
    }
  }
}

1 个答案:

答案 0 :(得分:1)

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