API de descanso en línea de Dynamics CRM 2016 con credenciales de cliente OAuth flow
Estoy intentando autenticarme con Dynamics CRM 2016 Online y Azure Active Directory. Pude seguir todos los pasos aquí:
https://msdn.microsoft.com/en-us/library/mt622431.aspx yhttps://msdn.microsoft.com/en-us/library/gg327838.aspx
pero estos pasos demuestran cómo configurar el flujo de autenticación de nombre de usuario. Me gustaría usar el flujo de credenciales del cliente. Creé una nueva aplicación en Azure AD, una aplicación web. Tengo un ID de cliente y una clave de aplicación y configuré los permisos para Dynamics CRM Online. Puedo obtener el token de acceso, pero en llamadas posteriores recibo este error:
Error HTTP 401 - No autorizado: acceso denegado
¿Hay un paso que me perdí? ¿Alguien sabe de una publicación en algún lugar que proporcione detalles sobre cómo hacer que este flujo funcione?
Aquí está mi código:
string clientId = "<client id>";
string appKey = "<app key>";
// Get the authority and resource URL at runtime
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri("https://<org address>/api/data/")).Result;
String authorityUrl = ap.Authority;
String resourceUrl = ap.Resource;
// Authenticate the registered application with Azure Active Directory.
AuthenticationContext authContext = new AuthenticationContext(authorityUrl);
ClientCredential clientCredential = new ClientCredential(clientId, appKey);
AuthenticationResult result = authContext.AcquireToken(resourceUrl, clientCredential);
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = client.GetAsync("https://<org address>/api/data/v8.1/EntityDefinitions").Result;