Autorice la aplicación web a ADFS para acceder a la API web de Dynamics CRM

Tengo una aplicación web que necesita hablar con la API web de Dynamic CRM 365. Dynamic CRM está configurado como una Parte confiable en ADFS. El servidor es Windows Server 2016 y todo está en las instalaciones y no en Azure.

Lo que hice para adquirir un token válido es lo siguiente:

1) En ADFS fui a Grupos de aplicaciones y agregué una nueva Aplicación de servidor, tomé el ClientID y también generé un Secreto de cliente para mi aplicación web.

2) Agregue un nuevo usuario nuevo en Active Directory the webAppUser

3) Agregar este usuario comoun usuario de la aplicación en CRM con el ID de aplicación, el ClientID que obtuve antes cuando registré mi aplicación web en ADFS. También creó un nuevo rol con permisos completos en la cuenta de entidad y le asigna este rol a este usuario de la aplicación

4) Estoy usando el siguiente código para recuperar un token de portador y agregarlo a mi encabezado de Autorización de Cliente Http.

public class CrmWebApiClient
{
    private HttpClient _httpClient;

    public CrmWebApiClient()
    {
        _httpClient = new HttpClient();
        _httpClient.BaseAddress = new Uri("https://crmbaseaddress.com");            
    }

    internal async Task Initialize()
    {
        try
        {               
            var authority = "https://adfsServerUrl/adfs/";
            var authContext = new AuthenticationContext(authority,false);
            var credentials = new ClientCredential(clientID,clientSecret);

            var authResult = await authContext.AcquireTokenAsync("https://crmbaseaddress.com", credentials);

            _httpClient.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
        }
        catch (Exception ex)
        {
            var error = ex;
        }

    }

    internal async Task<string> GetValuesAsync()
    {
        var result = string.Empty;
        try
        {
            result = await _httpClient.GetStringAsync("api/data/v8.1/accounts");
        }
        catch (Exception ex)
        {
            var error = ex;
        }

        return result;
    }
}

5) Me las arreglo para obtener un token, pero cuando llamo a la Web Api del CRM sigo recibiendo 401 sin autorización.

¿Podrías ayudarme? ¿Estoy en el camino correcto? ¿Debo hacer algo más?

Respuestas a la pregunta(1)

Su respuesta a la pregunta