Bereitstellung eines eigenen HttpClient, Unterstützung von HTTP-Proxys und Anpassung von User-Agent-Headern

Es gibt Fälle, in denen Entwickler eine feingranulare Kontrolle über die Instanz HttpClient wünschen, etwa um einen Proxy zu konfigurieren oder die effizienten Möglichkeiten von ASP.NET Core zum Pooling von HttpClient zu nutzen. Weitere Informationen finden Sie im HttpClientFactory-Dokument zur Implementierung eines ausfallsicheren HTTP-Anforderungsdokuments . Um HttpClient anzupassen, müssen Entwickler IMsalHttpClientFactory implementieren, das MSAL dann verwendet, um für jede HTTP-Anforderung ein HttpClient abzurufen.

IMsalHttpClientFactory-Implementierungsrichtlinien

Beispielimplementierung

IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();

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

Einfache Implementierung von 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 und Xamarin iOS

Wenn Sie Xamarin iOS verwenden, empfiehlt es sich, einen HttpClient Handler zu erstellen, der explizit den NSURLSession-basierten Handler für iOS 7 und höher verwendet. MSAL.NET erstellt automatisch ein HttpClient, das NSURLSessionHandler für iOS 7 und höher verwendet. Weitere Informationen finden Sie in der Xamarin iOS-Dokumentation für HttpClient.

Troubleshooting

Problem: In einer Desktopanwendung verwendet die Autorisierungsoberfläche nicht den von mir definierten HttpClient I.

Lösung:

Auf Desktop- und mobilen Apps öffnet MSAL einen Browser und navigiert zur Autorisierungs-URL. Es verwendet nicht HttpClient. Wenn Sie den eingebetteten Browser verwenden, können Sie den Proxy dafür steuern, indem Sie die Technik unter https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ verwenden. Dies ist unter .NET Core nicht möglich, wo nur der Systembrowser verfügbar ist. MSAL hat keine Kontrolle über den Systembrowser.

Problem: Mein Browser kann eine Verbindung mit dem Proxy herstellen, aber ich erhalte HTTP 407-Fehler von MSAL

Lösung: HTTP 407 zeigt ein Proxyauthentifizierungsproblem an. .NET Framework verwendet die Proxyeinstellungen von IE, die standardmäßig nicht die Einstellung "UseDefaultCredential" enthalten. Einige Benutzer haben berichtet, dass dieses Problem behoben wurde, indem Sie deren .config Datei Folgendes hinzufügen:

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