Я следую документации Microsoft по получению учетных данных для API Azure Graph. В этом документе говорится, что автоматическое приложение должно использовать client credentials provider
при выполнении вызовов веб-API.
Пример в документах для этого:
final ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.tenantId(tenant)
.build();
List<String> scopes = Arrays.asList("https://graph.microsoft.com/.default");
final TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(scopes, clientSecretCredential);
final GraphServiceClient graphClient =
GraphServiceClient
.builder()
.authenticationProvider(tokenCredentialAuthProvider)
.buildClient();
final User me = graphClient.me().buildRequest().get();
Но я встречаю исключение в последней строке:
Error message: /me request is only valid with delegated authentication flow.
Исследуя эту ошибку, я наткнулся на этот пост, который более подробно объясняет ошибку, что сбивает меня с толку относительно того, почему документация использует то, что кажется неуместным примером того, как использовать этот API. Кажется, delegated permissions authorization code flow
.
Этот пост ясности не добавляет.
Как правильно сделать этот звонок? Или это результат неверных настроек конфигурации в Консоль управления Azure чтобы приложение использовало разрешения приложения вместо делегированных разрешений?
@DerekGusoff - вот мой вопрос - это пример в документации, и для меня это не имеет смысла. Почему в документе Microsoft используется неуместный пример использования?
иногда что-то не так. человек, собирающий это, копировал/вставлял некоторый код между примерами.
@DerekGusoff Спасибо, я понимаю, что документы неверны, поэтому я обращаюсь к SO, чтобы найти правильный ответ. :) Я связался с MS, но это займет некоторое время.
Нет смысла вызывать /me
с потоком учетных данных клиента, потому что там нет /me
. Это просто автоматизированная учетная запись. У него нет пользовательских данных для извлечения.
Документация неверна - полностью опустите последнюю строку примера.
Вызовы к API с использованием этого потока имеют форму:
graphClient.users("user-id")
вместо того:
graphClient.me()
Чтобы отправить электронное письмо с помощью credentials provider flow
:
...
graphClient.users("[email protected]")
.sendMail(UserSendMailParameterSet
.newBuilder()
.withMessage(message)
.withSaveToSentItems(saveToSentItems)
.build())
.buildRequest()
.post();
Если у вас есть автоматический вызов учетных данных системы
/me
, какие именно данные вы надеетесь получить?