Java MSGraph SDK для получения фото профиля

Вопрос или проблема

Я использую java msgraph sdk 6.18.0

implementation 'com.microsoft.graph:microsoft-graph:6.18.0'
implementation 'com.azure:azure-identity:1.11.0'

Я пытаюсь получить фотографию профиля, но получаю значение null для фотографии. У clientId есть необходимые привилегии.

введите описание изображения здесь

Я пытаюсь получить фотографию профиля

    public byte[] getProfilePhoto(String principalName, int size) throws Exception{
        GraphServiceClient client = new GraphServiceClient(
                getClientCertificateCredential(),scopes);

        User user = client.users().byUserId(principalName).get();
        log.info("{}",user.getPhoto().getId());
                return null;
    }

    private TokenCredential getClientCertificateCredential() {
        return new ClientCertificateCredentialBuilder()
                .clientId(clientId)
                .tenantId(tenantId)
                .clientCertificatePassword(certificatePassword)
                .pfxCertificate(AuthenticationService.class.getResourceAsStream(certificatePath))
                .build();
    }

user.getPhoto() всегда равно null..

Я мигрировал с msgraph v1.5.+ на новую версию.. старая версия работает нормально..

Мне нужно сделать что-то другое, чтобы получить фотографию профиля? Я просмотрел документацию, но ничего не нашел.

Любая помощь была бы очень ценна.

Ответ или решение

Чтобы получить фото профиля пользователя с помощью Microsoft Graph SDK для Java (версии 6.18.0), следует учитывать несколько аспектов, которые могут быть связаны с вашей проблемой.

Во-первых, важно понимать, что метод user.getPhoto() возвращает информацию о фото профиля. Если он возвращает null, это может означать, что у пользователя действительно нет установленного фото профиля, или существует ошибка в коде запроса. Следите за тем, чтобы пользоваться правильными методами и указывать нужные права доступа.

Во-вторых, вам нужно проверить передаваемый идентификатор пользователя. Убедитесь, что вы используете корректный principalName, который действительно соответствует существующему пользователю в вашем Azure Active Directory.

Попробуйте изменить ваш код следующим образом, используя метод getPhoto() для получения фото профиля непосредственно:

public byte[] getProfilePhoto(String principalName) throws Exception {
    GraphServiceClient client = new GraphServiceClient(
            getClientCertificateCredential(), scopes);

    // Получаем фото профиля
    InputStream photoStream = client.users().byUserId(principalName).photo().content().buildRequest().get();

    // Преобразуем InputStream в byte[]
    if (photoStream != null) {
        return photoStream.readAllBytes();
    }

    return null; // Фото нет
}

private TokenCredential getClientCertificateCredential() {
    return new ClientCertificateCredentialBuilder()
            .clientId(clientId)
            .tenantId(tenantId)
            .clientCertificatePassword(certificatePassword)
            .pfxCertificate(AuthenticationService.class.getResourceAsStream(certificatePath))
            .build();
}

Заметьте, что для получения содержимого фото используется метод photo().content(). Это позволяет получить поток данных, который можно прочитать как массив байтов.

Кроме того, убедитесь, что вашему клиенту разрешено запрашивать доступ к фотографиям профиля. Проверьте, что у вашего приложения в Azure AD есть права на доступ к полям User.Read.All или User.ReadBasic.All.

Если после этих изменений проблема не разрешится, попробуйте проверить следующее:

  1. Убедитесь, что пользователь действительно имеет загруженное фото профиля в Azure Active Directory.
  2. Проверьте, есть ли какие-либо ошибки или предупреждения в log.info или других частях вашего кода, которые могут помочь в диагностике проблемы.
  3. Рассмотрите возможность использования другого метода для получения информации о пользователе и их фото, чтобы исключить возможность того, что именно этот метод вызывает проблему.

Надеюсь, это поможет вам решить проблему с получением фото профиля пользователя. Если вы столкнетесь с дальнейшем трудностями, не стесняйтесь задавать дополнительные вопросы.

Оцените материал
Добавить комментарий

Капча загружается...