Почему AcquireToken с ClientCredential завершается ошибкой с invalid_client (ACS50012)?

Почему мое приложение Azure AD не разрешает предоставление oauth client_credentials?

Я хочу использовать API Azure Graph, но сначала мне нужен токен oauth. Чтобы получить токен, я пытаюсь использовать Microsoft.IdentityModel.Clients.ActiveDirectory или ADAL версии 1.0.3 (от NuGet).

Я использую перегрузку AuthenticationContext.AcquireToken, которая принимает объект ClientCredential. (Я не могу использовать перегрузку, которая побуждает пользователя войти в систему, потому что я пишу сервис, а не приложение.)

Я настроил свое веб-приложение Azure AD, как описано в различных руководствах / примерах (например,ADAL - межсерверная аутентификация).

Мой код выглядит так:

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/thommmondago.onmicrosoft.com");
ClientCredential cc = new ClientCredential("41151135-61b8-40f4-aff7-8627e9eaf853", clientSecretKey);
AuthenticationResult result = ac.AcquireToken("https://graph.windows.net", cc);

AcquireToken строка выдает исключение:

sts_token_request_failed: Token request to security token service failed.  Check InnerException for more details

Внутренним исключением является исключение WebException, и полученный ответ выглядит как ошибка oauth:

{ "error":"invalid_client",
 "error_description":"ACS50012: Authentication failed."
 "error_codes":[50012],
 "timestamp":"2014-03-17 12:26:19Z",
 "trace_id":"a4ee6702-e07b-40f7-8248-589e49e96a8d",
 "correlation_id":"b304af2e-2748-4067-99d0-2d7e55b121cd" }

Обход ADAL и использование curl с конечной точкой oauth также дает ту же ошибку.

Мой код работает, если я использую данные приложения Azure, которое я нашелВот:

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/graphDir1.onmicrosoft.com");
ClientCredential cc = new ClientCredential("b3b1fc59-84b8-4400-a715-ea8a7e40f4fe", "FStnXT1QON84B5o38aEmFdlNhEnYtzJ91Gg/JH/Jxiw=");
AuthenticationResult result = ac.AcquireToken("https://graph.windows.net", cc);

Так что это не ошибка с моим кодом. Я думаю, что это либо ошибка моего Azure AD, либо у меня неверные параметры ClientCredential.

Ответы на вопрос(4)

Ваш ответ на вопрос