Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In alcuni casi gli sviluppatori desiderano un controllo dettagliato dell'istanza HttpClient, ad esempio per configurare un proxy o utilizzare i metodi efficienti di ASP.NET Core per il pooling di HttpClient. Per ulteriori informazioni, vedere il documento HttpClientFactory per implementare richieste HTTP resilienti. Per personalizzare HttpClient, gli sviluppatori dovranno implementare IMsalHttpClientFactory, che MSAL utilizzerà quindi per ottenere un HttpClient per ogni richiesta HTTP.
Linee guida per l'implementazione di IMsalHttpClientFactory
- Per esempi di factory .NET scalabili che possono essere adattate a questa interfaccia, vedere System.Net.Http.HttpClient, ad esempio
IHttpClientFactorydi ASP.NET Core. - Le implementazioni devono essere sicure rispetto ai thread.
- Non creare un nuovo
HttpClientinGetHttpClient, poiché ciò comporterà l'esaurimento delle porte. - MSAL non chiamerà
Dispose()suHttpClient. - Se l'app usa l'autenticazione integrata Windows, assicurarsi che System.Net.Http.HttpClientHandler.UseDefaultCredentials sia impostata su
true.
Implementazione di esempio
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = ConfidentialClientApplication.Create("client_id")
.WithHttpClientFactory(httpClientFactory)
.Build();
Una semplice implementazione di 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 e Xamarin iOS
Quando si usa Xamarin iOS, è consigliabile creare un oggetto HttpClient che usa esplicitamente il gestore basato su NSURLSession per iOS 7 e versioni successive. MSAL.NET crea automaticamente un oggetto HttpClient che usa NSURLSessionHandler per iOS 7 e versioni successive. Per altre informazioni, vedere la documentazione di Xamarin iOS per HttpClient.
Troubleshooting
Problema: in un'applicazione desktop, l'esperienza di autorizzazione non usa l'HttpClient che ho definito
Soluzione:
Nelle app desktop e per dispositivi mobili, MSAL apre un browser e passa all'URL di autorizzazione. Non utilizza HttpClient. Quando si usa il browser incorporato, è possibile controllarne il proxy seguendo la procedura descritta in: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Questo non è possibile in .NET Core, dove è disponibile solo il browser di sistema. MSAL non ha alcun controllo sul browser di sistema.
Problema: il browser può connettersi al proxy, ma si ricevono errori HTTP 407 da MSAL
Soluzione: HTTP 407 mostra un problema di autenticazione proxy. .NET framework usa le impostazioni proxy di Internet Explorer, che per impostazione predefinita non include l'impostazione "UseDefaultCredential". Alcuni utenti hanno segnalato la risoluzione di questo problema aggiungendo quanto segue al file .config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>