Tillhandahålla din egen HttpClient, stöd för HTTP-proxyservrar och anpassning av användaragenthuvuden

Det finns fall där utvecklare vill ha detaljerad kontroll över instansenHttpClient, till exempel att konfigurera en proxy eller använda ASP.NET Core effektiva sätt att poola HttpClient. Du kan läsa mer i dokumentet HttpClientFactory för att implementera elastiska HTTP-begäranden . För att anpassa HttpClientmåste utvecklarna implementera IMsalHttpClientFactory, som MSAL sedan använder för att hämta en HttpClient för varje HTTP-begäran.

Implementeringsriktlinjer för IMsalHttpClientFactory

Exempel på implementering

IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();

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

En enkel implementering av 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 och Xamarin iOS

När du använder Xamarin iOS rekommenderar vi att du skapar en HttpClient som uttryckligen använder den NSURLSession-baserade hanteraren för iOS 7 och senare. MSAL.NET skapar automatiskt en HttpClient som använder NSURLSessionHandler för iOS 7 och senare. Mer information finns i Xamarin iOS-dokumentationen för HttpClient.

Troubleshooting

Problem: I ett skrivbordsprogram använder inte auktoriseringsflödet den HttpClient som jag definierade

Lösning:

I skrivbords- och mobilappar öppnar MSAL en webbläsare och navigerar till auktoriserings-URL:en. Den använder inte HttpClient. När du använder den inbäddade webbläsaren kan du styra dess proxyinställningar genom att använda tekniken som beskrivs här: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Detta kan inte åstadkommas i .NET Core, där endast systemwebbläsaren är tillgänglig. MSAL har ingen kontroll över systemwebbläsaren.

Problem: Min webbläsare kan ansluta till proxyn, men jag får HTTP 407-fel från MSAL

Lösning: HTTP 407 visar ett problem med proxyautentisering. .NET ramverket använder proxyinställningarna från IE, som som standard inte innehåller inställningen "UseDefaultCredential". Vissa användare har rapporterat att de åtgärdar det här problemet genom att lägga till följande i sin .config-fil:

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