簡體   English   中英

REST客戶端示例使用Azure AD Graph API更新縮略圖照片嗎?

[英]REST client sample to update thumbnail Photo using Azure AD Graph api?

我正在尋找一個示例REST客戶端,該客戶端可以使用Azure AD圖形API更新用戶縮略圖嗎? REST客戶端可以在那里使用並且可以正常使用https://msdn.microsoft.com/zh-cn/library/azure/ad/graph/api/users-operations#GetUserThumbnailPhoto

我嘗試了此示例Java Rest Client,但收到405-不允許的方法:

 public void updateUserPhotoGraph(ModelMap model) throws IOException {

        //https://graph.windows.net/{tenant}/users/{user}/thumbnailPhoto?api-version=1.6
        UriComponents uriComponents = getPhotoUri();
        String bearerToken = getBearerToken();

        try {

            HttpClient httpclient = HttpClients.createDefault();
            byte[] bytesEncoded = Base64.encode(extractBytes());

            URIBuilder builder = new URIBuilder(uriComponents.toString());
            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + bearerToken);
            request.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM);
            request.setEntity(new ByteArrayEntity(bytesEncoded));

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                System.out.println(EntityUtils.toString(entity));
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

**也將以上內容更改為發送了PATCH請求,但出現了相同的錯誤。

是否有人使用此API更新了thumnailphoto?
我們可以使用[ https://graph.windows.net/ {tenant} / users / {user} /thumbnailPhoto?api-version=1.6]更新/設置縮略圖照片嗎?

什么是正確的API?

在上述答案的幫助下,我在c#中得到了一個可行的解決方案。 當使用以下變量調用時,此方法有效:

nuget:ADAL v2.19。

authContext = new AuthenticationContext(“ https://login.microsoftonline.com/ ” +租戶)

Globals.aadGraphResourceId =“ https://graph.windows.net/

憑據=新的ClientCredential(clientId,clientSecret)

api =“ /用戶/” + objectId +“ / thumbnailPhoto”

希望能幫助到你!

private async Task<string> UploadByteArray(string api, byte[] byteArray)
{
        // NOTE: This client uses ADAL v2, not ADAL v4
        AuthenticationResult result = authContext.AcquireToken(Globals.aadGraphResourceId, credential);
        HttpClient http = new HttpClient();
        string url = Globals.aadGraphEndpoint + tenant + api + "?" + Globals.aadGraphVersion;

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, url);
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);            
        request.Content = new System.Net.Http.ByteArrayContent(byteArray);
        request.Content.Headers.Add("Content-Type", "application/octet-stream");
        HttpResponseMessage response = await http.SendAsync(request);

        if (!response.IsSuccessStatusCode)
        {
            string error = await response.Content.ReadAsStringAsync();
            object formatted = JsonConvert.DeserializeObject(error);
            throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented));
        }

        return await response.Content.ReadAsStringAsync();
    }

查看此文檔時 ,您可能會發現“ thumbnailPhoto”屬性是流類型並且可以使用PATCH,因此您可以嘗試使用以下api來更新該屬性:

 https://graph.windows.net/{tenant}/directoryObjects/{user}/Microsoft.DirectoryServices.User/thumbnailPhoto?api-version=1.5

我能夠使用PUT操作將Jpeg縮略圖上傳到網址: https://graph.windows.net/{tenant}/users/{user object id}/thumbnailPhoto?api-version=1.6 : https://graph.windows.net/{tenant}/users/{user object id}/thumbnailPhoto?api-version=1.6

內容類型標頭需要設置為application/octet-stream ,內容只是二進制Jpeg數據。

我的代碼在Swift中,所以在這里不顯示它,但是我假定給出了這些信息,因此創建合適的Java代碼應該不太困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM