¿Por qué AcquireToken con ClientCredential falla con invalid_client (ACS50012)?

¿Por qué mi aplicación Azure AD no permite una concesión oauth client_credentials?

Quiero usar la API de Azure Graph, pero primero necesito un token oauth. Para obtener el token, estoy tratando de usar Microsoft.IdentityModel.Clients.ActiveDirectory, también conocido como ADAL versión 1.0.3 (de NuGet).

Estoy usando la sobrecarga de AuthenticationContext.AcquireToken que toma un objeto ClientCredential. (No puedo usar la sobrecarga que hace que el usuario inicie sesión porque estoy escribiendo un servicio, no una aplicación).

Configuré mi aplicación web Azure AD como se describe en varios tutoriales / ejemplos (p. Ej.ADAL - Autenticación de servidor a servidor)

Mi código se ve así:

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);

losAcquireToken la línea lanza una excepción:

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

La excepción interna es una WebException, y la respuesta recibida parece un error 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" }

Omitir ADAL y usar curl con el punto final oauth también da el mismo error.

Mi código funciona si uso los detalles de la aplicación de Azure que encontréaquí:

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);

Entonces no es un error con mi código. Creo que es un error con mi Azure AD o tengo los parámetros ClientCredential incorrectos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta