2016-05-23 106 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。 (並且這些記錄在相應的頁面上)。 看起來我不得不重新考慮這整個方法。 –

相關問題