我能够很好地检索个人资料照片,但在尝试更新照片时会遇到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"
}
}
}
答案 0 :(得分:1)
您似乎列出了为您的应用配置的委派权限,但使用客户端凭据流检索了令牌,该流使用单独的应用程序权限。根据您引用的文档页面,更新用户配置文件照片所需的范围是User.ReadWrite。这不能通过仅限应用程序的范围完成,包括User.ReadWrite.All。用户照片可以使用授权代码授权流程进行更新(请参阅https://graph.microsoft.io/en-us/docs/authorization/app_authorization)