2016-04-08 19 views
2

Microsoft Graph API'sini kullanma Azure Active Directory kiracımızdaki tüm kullanıcıların bir listesini alabildim ve bir profil resmi olup olmadığını belirledim. Daha sonra bir fotoğraf olmadan kullanıcıların listesini almak ve onlar için bir tane yüklemek istedim, ancak kullandığım hesabın tüm kullanıcı hesaplarına tam erişime sahip olmasına ve uygulamanın tam izinlerle kurulumuna rağmen API 403 hatası döndürdü Grafik API'sine.Microsoft Graph API Başka bir kullanıcının fotoğrafı güncellensin mi?

YASAK

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 Graph API kullanarak veya bir yere bir izni eksik yapmak mümkün değil midir?

SCP değerdir: Calendars.Read Calendars.ReadWrite Contacts.Read Contacts.ReadWrite Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All eposta Exchange.Manage Files.Read Files.Read.Selected Dosyalar .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 Notları .ReadWrite.All Notes.ReadWrite.CreatedByApp offline_access openid People.Read People.ReadWrite profile Sites.Read.All Tasks.Read Tasks.ReadWrite User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All

+0

Eğer http://jwt.calebb.net adresinden belirteci yazınız Can ve Bize "scp" alanı için değer verin. Bu, simgenizdeki izinlerin listesidir. Teşekkürler. –

+0

Merhaba Venkat, SCP öznitelik değerini bir yorum olarak girmek için çok uzun olduğu için orijinal gönderiye ekledim. –

+0

İşlemin PATCH ile çalıştığından emin değil. Bir PUT olmalıdır. Ancak aynı sorunu (yönetici kullanıcı olarak çalışıyor) da tekrar ediyorum ve işte iz. Kapsamlar, başka bir kullanıcının fotoğrafını güncellemek için yeterli olması gereken user.readwrite.all içerir. { "hata": { "kod": "ErrorAccessDenied", "mesaj": "Erişim engellendi kimlik bilgilerini kontrol edin ve tekrar deneyin."., "innerError": { "istek-id": "23559b24- d5e9-4dae-8311-94f706320b4b ", " date ":" 2016-04-09T06: 21: 56 " } } } –

cevap

5

Her şeyden önce, yeni M'ye bir göz atmalısınız. İşte 2016 kurmak // sırasında salınan icrosoft Grafik SDK Microsoft Graph SDK'nın Github: İşte
https://github.com/microsoftgraph Ben oluşturduk tam örneğidir, bunu kullanarak: Sorunuza için https://github.com/Mimetis/NextMeetingsForGraphSample

, burada iki yöntem ben vardır Benim için çalıştığı yazılan: Geçerli bir erişim belirteci almak için bir yönteminiz olduğunu varsayalım. Microsoft Graph SDK kullanırsanız

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(); 
    } 
} 

, gerçekten basit olacak :)

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

SEB

+0

SDK'yı bildiğiniz için teşekkürler, ancak yine de aynı hata mesajını alıyorum. Kullanmakta olduğum hesabın buna erişebilmesine rağmen API'nın başka bir kullanıcının fotoğrafını güncellemesini sağladığını düşünmüyorum. –

+0

bu yüzden kapsamlarınızla veya OAUTH2 erişim belirtecinizle ilgili bir sorunla karşılaşırsınız –

+0

Bunu yeniden yaptığımda, istemci kitaplığını kullanıyordum;) Kullanıcı ayrıca bir yöneticiydi. Bunu, uygulama + kullanıcı kodu akışı aracılığıyla yapabileceğinize ve bunu yapmak için yalnızca uygulama belirtecine ihtiyacınız olacağını düşünmüyorum. İstemci kimlik akışını denediniz mi? Bu senin için mi çalıştı? –