Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Se System.Net.Http.HttpClient för exempel på skalbara .NET-fabriker som kan anpassas för detta gränssnitt, till exempel ASP.NET Cores
IHttpClientFactory. - Implementeringar måste vara trådsäkra.
- Skapa inte en ny
HttpClientiGetHttpClient, eftersom detta leder till portöverbelastning. - MSAL kommer inte att anropa
Dispose()påHttpClient. - Om appen använder integrerad Windows-autentisering kontrollerar du att System.Net.Http.HttpClientHandler.UseDefaultCredentials är inställt på
true.
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>