Proporcionar tu propio HttpClient, compatibilidad con proxies HTTP y personalización de los encabezados del agente de usuario.

Hay casos en los que los desarrolladores desean un control más detallado de la instancia HttpClient, como por ejemplo al configurar un proxy o al utilizar los métodos eficientes de ASP.NET Core para agrupar en un pool el HttpClient. Puede leer más en el documento HttpClientFactory para implementar solicitudes HTTP resistentes . Para personalizar HttpClient, los desarrolladores deberán implementar IMsalHttpClientFactory, que MSAL usará para obtener una HttpClient para cada solicitud HTTP.

Instrucciones de implementación de IMsalHttpClientFactory

Implementación de ejemplo

IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();

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

Una implementación sencilla 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 y Xamarin iOS

Al usar Xamarin iOS, se recomienda crear un HttpClient que utilice explícitamente el controlador basado en NSURLSession para iOS 7 y versiones posteriores. MSAL.NET crea automáticamente un HttpClient que usa NSURLSessionHandler para iOS 7 y versiones posteriores. Para obtener más información, lea la documentación de Xamarin iOS para HttpClient.

Solución de problemas

Problema: En una aplicación de escritorio, el proceso de autorización no utiliza el HttpClient que he definido.

Solución:

En aplicaciones móviles y de escritorio, MSAL abre un explorador y navega a la dirección URL de autorización. No usa HttpClient. Cuando se utiliza el navegador integrado, puede controlar su proxy siguiendo la técnica descrita en: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Esto no se puede lograr en .NET Core, donde solo está disponible el navegador del sistema. MSAL no tiene control sobre el explorador del sistema.

Problema: Mi explorador puede conectarse al proxy, pero obtengo errores HTTP 407 de MSAL

Solución: HTTP 407 muestra un problema de autenticación de proxy. .NET marco usa la configuración de proxy de IE, que de forma predeterminada no incluye la configuración "UseDefaultCredential". Algunos usuarios han notificado la corrección de este problema agregando lo siguiente a su archivo .config:

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