Fornecimento do seu próprio HttpClient, suporte para proxies HTTP e personalização dos cabeçalhos de agente do utilizador

Existem casos em que os programadores querem controlo detalhado da HttpClient instância, como configurar um proxy ou usar as formas eficientes do ASP.NET Core de agrupar o HttpClient. Pode saber mais no documento HttpClientFactory para implementar pedidos HTTP resilientes. Para personalizar HttpClient, os programadores terão de implementar IMsalHttpClientFactory, que o MSAL usará para obter um HttpClient para cada pedido HTTP.

Diretrizes de implementação do IMsalHttpClientFactory

Exemplo de implementação

IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();

var pca = ConfidentialClientApplication.Create("client_id") 
                                        .WithHttpClientFactory(httpClientFactory)
                                        .Build();

Uma implementação simples de IMsalHttpClientFactory

public class StaticClientWithProxyFactory : IMsalHttpClientFactory
{
    private static readonly HttpClient s_httpClient;

    static StaticClientWithProxyFactory()
    {
        var webProxy = new WebProxy(
            new Uri("http://my.proxy"),
            BypassOnLocal: false);

        webProxy.Credentials = new NetworkCredential("user", "pass");

        var proxyHttpClientHandler = new HttpClientHandler
        {
            Proxy = webProxy,
            UseProxy = true,
        };

        s_httpClient = new HttpClient(proxyHttpClientHandler);
        
    }

    public HttpClient GetHttpClient()
    {
        return s_httpClient;
    }
}

HttpClient e Xamarin iOS

Ao usar o Xamarin iOS, recomenda-se criar um HttpClient que utilize explicitamente o processador baseado em NSURLSession para o iOS 7 e versões posteriores. O MSAL.NET cria automaticamente um HttpClient que usa NSURLSessionHandler para iOS 7 e versões posteriores. Para mais informações, leia a documentação do Xamarin iOS para o HttpClient.

Troubleshooting

Problema: Numa aplicação de ambiente de trabalho, a experiência de autorização não utiliza o HttpClient que defini

Solução:

Em aplicações de desktop e móveis, o MSAL abre um navegador e navega até à URL de autorização. Não utiliza HttpClient. Ao utilizar o navegador incorporado, pode controlar o proxy desse navegador seguindo a técnica descrita em: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Isto não é possível no .NET Core, onde apenas o navegador do sistema está disponível. A MSAL não tem controlo sobre o navegador do sistema.

Problema: O meu navegador consegue ligar-se ao proxy, mas recebo erros HTTP 407 do MSAL

Solução: HTTP 407 mostra um problema de autenticação proxy. O framework .NET utiliza as definições de proxy do IE, que por defeito não inclui a definição "UseDefaultCredential". Alguns utilizadores relataram ter corrigido este problema adicionando o seguinte ao seu ficheiro de .config:

<system.net>
        <defaultProxy enabled="true" useDefaultCredentials="true" />  
</system.net>