Autorize o WebApp ao ADFS para acessar a API da Web do Dynamics CRM

Eu tenho um aplicativo Web que precisa falar com a API Web Dinâmica do CRM 365. O CRM dinâmico está configurado como uma terceira parte confiável no ADFS. O servidor é o Windows Server 2016 e tudo está no local e não no Azure.

O que eu fiz para adquirir um token válido é o seguinte:

1) No ADFS, foi para Grupos de aplicativos e adicione um novo aplicativo de servidor, pegou o ClientID e também gerou um segredo de cliente para meu aplicativo da web.

2) Adicione um novo usuário no Active Directory ao webAppUser

3) Adicione este usuário comoum usuário de aplicativo no CRM com o ID do aplicativo, o ClientID obtive anteriormente quando registrei meu aplicativo Web no ADFS. Também criou uma nova função com permissões totais na conta de entidade e atribui essa função a este usuário do aplicativo

4) Estou usando o código abaixo para recuperar um token de portador e adicioná-lo ao meu cabeçalho de autorização HttpClient.

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) Consigo obter um token, mas quando ligo para a API da Web do CRM, ainda recebo 401 Não autorizado.

Você pode por favor me ajudar? Estou no caminho certo? Devo fazer mais alguma coisa?

questionAnswers(1)

yourAnswerToTheQuestion