2016-04-08 18 views
2

Microsoft Graph APIを使用して、私たちのAzure Active Directoryテナント内のすべてのユーザーの一覧を取得し、プロファイル画像があるかどうかを判断できました。私はその後、写真のないユーザーのリストを取得してアップロードしたいと思っていましたが、使用しているアカウントにすべてのユーザーアカウントへのフルアクセス権があり、アプリケーションが完全なアクセス許可でセットアップされていても、グラフAPIに送信します。Microsoft Graph API別のユーザーの写真を更新しますか?

禁じられ

using (HttpClient client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("https://graph.microsoft.com/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/jpeg")); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", oauthToken); 

    // HTTP GET     
    HttpResponseMessage response = await client.PatchAsync($"v1.0/users/{emailAddress}/photo/$value", byteContent); 
    if (!response.IsSuccessStatusCode) 
    { 
     throw new Exception("Error!"); 
    } 
} 

403グラフAPIを使用して、これを行うことはできませんか、私はどこかの許可をしないのですか?

SCP値は次のとおりです。 Calendars.Read Calendars.ReadWrite Contacts.Read Contacts.ReadWrite Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.AllメールExchange.Manage Files.Read Files.Read.Selectedファイル.ReadWrite Files.ReadWrite.AppFolder Files.ReadWrite.Selected full_access_as_user Group.Read.All Group.ReadWrite.All Mail.Read Mail.ReadWrite Mail.Send MailboxSettings.ReadWrite Notes.Create Notes.Read Notes.Read.All Notes.ReadWrite Notes .ReadWrite.All Notes.ReadWrite.CreatedByApp offline_access openid People.Read People.ReadWriteプロファイルSites.Read.All Tasks.Read Tasks.ReadWrite User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All

+0

あなたがhttp://jwt.calebb.netであなたのトークンを入力してくださいことができ、 「scp」フィールドの値を教えてください。これはあなたのトークンの権限のリストです。ありがとう。 –

+0

こんにちはVenkat、私はそれがコメントとして入力するには長すぎたので、元の投稿にSCP属性値を追加しました。 –

+0

操作がPATCHで機能するかどうかは不明です。それはPUTでなければなりません。しかし、私も同じ問題(管理者ユーザーとして実行)をreproし、ここにトレースです。スコープには、別のユーザーの写真を更新するのに十分なはずのuser.readwrite.allが含まれています。 { "エラー":{ "code": "ErrorAccessDenied"、 "メッセージがアクセスできませんでした。資格情報を確認してからやり直してください。"、 "innerError":{ "request-id": "23559b24- d5e9-4dae-8311-94f706320b4b "、 " date ":" 2016-04-09T06:21:56 " } } } –

答えて

5

まず、新しいM //ここで2016 を構築中に放出さicrosoftグラフSDKは、マイクロソフトグラフSDKのGithubにされていますhttps://github.com/microsoftgraph
ここではそれを使用して、私が作成しまし完全なサンプルである:あなたの質問のために https://github.com/Mimetis/NextMeetingsForGraphSample

、ここにされている2つの方法I私のために働いた書いた: 私はあなたが有効なアクセストークンを取得する方法があると仮定します。

using (HttpClient client = new HttpClient()) 
{ 
    var authResult = await AuthenticationHelper.Current.GetAccessTokenAsync(); 
    if (authResult.Status != AuthenticationStatus.Success) 
     return; 

    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + authResult.AccessToken); 

    Uri userPhotoEndpoint = new Uri(AuthenticationHelper.GraphEndpointId + "users/" + userIdentifier + "/Photo/$value"); 
    StreamContent content = new StreamContent(image); 
    content.Headers.Add("Content-Type", "application/octet-stream"); 

    using (HttpResponseMessage response = await client.PutAsync(userPhotoEndpoint, content)) 
    { 
     response.EnsureSuccessStatusCode(); 
    } 
} 

は、MicrosoftグラフSDKを使用している場合、それは本当に簡単なことでしょう:)

GraphServiceClient graphService = new GraphServiceClient(AuthenticationHelper.Current); 
var photoStream = await graphService.Users[userIdentifier].Photo.Content.Request().PutAsync(image); //users/{1}/photo/$value 

セブ

+0

SDKについて知ってくれてありがとう、ありがとう、私はまだ同じエラーメッセージが表示されます。私は、使用しているアカウントがアクセス権を持っていても、APIが別のユーザーの写真を更新できるとは思わない。 –

+0

あなたのスコープで、またはあなたのOAUTH2アクセストークンでprobemを持っています –

+0

私はこれをrepro'dしました。これはクライアントライブラリを使用していました;)ユーザーも管理者でした。私は、あなたがアプリ+ユーザコードフローを通してこれを行うことができるとは思わないし、これを行うにはアプリ専用のトークンが必要になるだろう。クライアント資格フローを試しましたか?それはあなたのために働いたのですか? –

関連する問題