Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Há casos em que os desenvolvedores querem um controle mais detalhado da instância de HttpClient, como configurar um proxy ou usar os mecanismos eficientes do ASP.NET Core para pool de instâncias do HttpClient. Você pode ler mais no documento HttpClientFactory para implementar requisições HTTP resilientes. Para personalizar HttpClient, os desenvolvedores precisarão implementar IMsalHttpClientFactory, que a MSAL usará para obter um(a) HttpClient para cada solicitação HTTP.
Diretrizes de implementação do IMsalHttpClientFactory
- Consulte System.Net.Http.HttpClient para ver exemplos de fábricas .NET escaláveis que podem ser adaptadas para esta interface, como o ASP.NET Core
IHttpClientFactory. - As implementações devem ser thread-safe.
- Não crie um novo
HttpClientemGetHttpClient, pois isso levará ao esgotamento de portas. - A MSAL não chamará
Dispose()noHttpClient. - Se o aplicativo usar Autenticação Integrada do Windows, certifique-se de que System.Net.Http.HttpClientHandler.UseDefaultCredentials esteja definido como
true.
Exemplo de implementação
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = ConfidentialClientApplication.Create("client_id")
.WithHttpClientFactory(httpClientFactory)
.Build();
Uma implementação simples 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 e Xamarin iOS
Ao usar o Xamarin iOS, é recomendável criar um HttpClient que use explicitamente o manipulador baseado em NSURLSession para o iOS 7 e versões posteriores. MSAL.NET cria automaticamente um HttpClient que usa NSURLSessionHandler para iOS 7 e mais recente. Para obter mais informações, leia a documentação do Xamarin iOS para HttpClient.
Troubleshooting
Problema: em um aplicativo da área de trabalho, a experiência de autorização não usa o HttpClient que eu defini
Solução:
Em aplicativos móveis e desktop, a MSAL abre um navegador e navega até a URL de autorização. Ele não usa HttpClient. Ao usar o navegador incorporado, você pode controlar o proxy dele seguindo a técnica em: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Isso não pode ser alcançado no .NET Core, onde somente o navegador do sistema está disponível. A MSAL não tem controle sobre o navegador do sistema.
Problema: meu navegador pode se conectar ao proxy, mas recebo erros HTTP 407 da MSAL
Solução: HTTP 407 mostra um problema de autenticação de proxy. O .NET Framework usa as configurações de proxy do Internet Explorer, que, por padrão, não incluem a configuração "UseDefaultCredential". Alguns usuários relataram a correção desse problema adicionando o seguinte ao arquivo .config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>