2016-05-23 13 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を使って自分のアプリケーションにこの特権を割り当てましたが(また、あらゆる種類の他の特権を許可しようとしましたが)、まだエラーが発生します。私はその後、更新しよう

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 

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 -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のようなアプリケーションパーミッションスコープをサポートしているからです。 (そしてそれらは対応するページに記載されています)。 このアプローチ全体を再考する必要があるように見えます。 –

関連する問題