Fourniture de votre propre httpClient, prise en charge des proxys HTTP et personnalisation des en-têtes d’agent utilisateur

Il existe des cas où les développeurs souhaitent un contrôle fin de l’instance HttpClient, par exemple pour configurer un proxy ou utiliser les méthodes efficaces d’ASP.NET Core pour la mise en pool de l’instance HttpClient. Vous pouvez en savoir plus dans le document HttpClientFactory pour implémenter des requêtes HTTP résilientes. Pour personnaliser HttpClient, les développeurs devront implémenter IMsalHttpClientFactory, que MSAL utilisera ensuite pour obtenir un HttpClient pour chaque requête HTTP.

Instructions d’implémentation IMsalHttpClientFactory

Exemple d'implémentation

IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();

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

Implémentation simple 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 et Xamarin iOS

Lorsque vous utilisez Xamarin iOS, il est recommandé de créer un gestionnaire HttpClient qui utilise explicitement le gestionnaire basé sur NSURLSession pour iOS 7 et les versions plus récentes. MSAL.NET crée automatiquement un HttpClient qui utilise NSURLSessionHandler pour iOS 7 et les versions plus récentes. Pour plus d’informations, consultez la documentation Xamarin iOS pour HttpClient.

Troubleshooting

Problème : sur une application de bureau, l’expérience d’autorisation n’utilise pas le httpClient que j’ai défini

Solution :

Sur les applications de bureau et mobiles, MSAL ouvre un navigateur et accède à l’URL d’autorisation. Il n’utilise pas HttpClient. Lorsque vous utilisez le navigateur intégré, vous pouvez configurer son proxy en suivant la technique décrite ici : https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Cela n’est pas possible sur .NET Core, où seul le navigateur système est disponible. MSAL n’a aucun contrôle sur le navigateur système.

Problème : Mon navigateur peut se connecter au proxy, mais j’obtiens des erreurs HTTP 407 à partir de MSAL

Solution : HTTP 407 affiche un problème d’authentification proxy. .NET framework utilise les paramètres de proxy d’Internet Explorer, qui, par défaut, n’inclut pas le paramètre « UseDefaultCredential ». Certains utilisateurs ont signalé la résolution de ce problème en ajoutant ce qui suit à leur fichier .config :

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