2016-05-23 85 views
0

我能够检索配置文件照片就好了,但在尝试更新照片时遇到ErrorAccessDenied。根据这样的:无法使用Microsoft Graph API更新profilePhoto

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流程如下:

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

看起来你上市委派权限配置为您的应用程序,但使用客户端凭证流,它采用独立的应用权限检索到的令牌。根据您引用的文档页面,更新用户配置文件所需的范围是User.ReadWrite。这不适用于仅限应用程序的范围,包括User.ReadWrite.All。用户照片可以使用授权代码授权流程进行更新(请参阅https://graph.microsoft.io/en-us/docs/authorization/app_authorization

+0

对不起,User.ReadWrite.All与User.ReadWrite混淆,我已更正我的文章。 你能指点我说的个人资料照片无法使用仅限应用程序范围进行更新吗?如果是这样的话,那么这真的会引发一场风波。此应用程序需要能够将人员的照片更新为独立流程,而无需通过授权代码或类似的任何终端用户进行交互。 对此的背景是,AAD同步过程似乎不能可靠地更新用户的照片,所以我们正在尝试设置一个单独的过程来执行此操作。 –

+0

哦,现在我想我明白了。 User.ReadWrite是一个委托权限,而不是应用程序权限。而且它是上述页面上记录的唯一允许的范围,用于更新照片。 令人困惑的是,我可以*阅读*照片就好了。但其原因是因为GET方法*还*支持应用程序权限范围,如User.ReadWrite.All。 (并且这些记录在相应的页面上)。 看起来我不得不重新考虑这整个方法。 –

相关问题