Пример клиента REST для обновления эскиза фото с помощью API Azure AD Graph?

Я ищу образец клиента REST, который может обновлять миниатюры фотографий пользователей с помощью API графа Azure AD? Клиент REST для Get есть, и он работает https://msdn.microsoft.com/en-us/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 подойдет для этого?


person Pallab Lahiri    schedule 20.04.2016    source источник


Ответы (3)


С помощью приведенных выше ответов я получил рабочее решение на С #. Этот метод работает, когда вызывается со следующими переменными:

nuget: ADAL v2.19.

authContext = new AuthenticationContext ("https://login.microsoftonline.com/" + клиент)

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

учетные данные = новый ClientCredential (clientId, clientSecret)

api = "/ users /" + 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();
    }
person Olivier    schedule 19.09.2017

При просмотре В этом документе вы можете обнаружить, что свойство «thumbnailPhoto» является типом потока и может использовать PATCH, поэтому вы можете попробовать использовать указанный ниже api для обновления этого свойства:

 https://graph.windows.net/{tenant}/directoryObjects/{user}/Microsoft.DirectoryServices.User/thumbnailPhoto?api-version=1.5
person Nan Yu    schedule 22.04.2016
comment
Спасибо за ответ. Я попробовал PATCH graph.windows.net {tenent} / directoryObjects / {upn} /Microsoft.DirectoryServices.User /thumbnailPhoto?api-version=1.6 Content-Type: application / octet-stream Тело запроса, содержащее массив байтов GOT ---- ›{odata.error: {code: Request_BadRequest, message: {lang: en, value: URI 'graph.windows.net {tenent} / directoryObjects / {upn} /Microsoft.DirectoryServices.User/thumbnailPhoto ? api-version = 1.6 'относится к именованному потоку и недействителен для операции' PATCH '.}}} Похоже, что эскиз поддерживает только GET - person Pallab Lahiri; 25.04.2016

Мне удалось загрузить миниатюру Jpeg, выполнив PUT операцию по адресу: https://graph.windows.net/{tenant}/users/{user object id}/thumbnailPhoto?api-version=1.6

Заголовок типа содержимого должен быть установлен на application/octet-stream, а содержимое - это просто двоичные данные Jpeg.

Мой код написан на Swift, поэтому я не буду показывать его здесь, но полагаю, учитывая эту информацию, не должно быть слишком сложно создать соответствующий код Java.

person Paulw11    schedule 16.09.2016