Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Existem casos em que os programadores querem controlo detalhado da HttpClient instância, como configurar um proxy ou usar as formas eficientes do ASP.NET Core de agrupar o HttpClient. Pode saber mais no documento HttpClientFactory para implementar pedidos HTTP resilientes. Para personalizar HttpClient, os programadores terão de implementar IMsalHttpClientFactory, que o MSAL usará para obter um HttpClient para cada pedido HTTP.
Diretrizes de implementação do IMsalHttpClientFactory
- Veja System.Net.Http.HttpClient para exemplos de fábricas .NET escaláveis que podem ser adaptadas para esta interface, como a
IHttpClientFactorydo ASP.NET Core. - As implementações devem ser seguras em ambiente multithread.
- Não crie um novo
HttpClientemGetHttpClient, pois isso levará ao esgotamento do porto. - O MSAL não invocará
Dispose()emHttpClient. - Se a sua aplicação usar Autenticação Windows Integrada, certifique-se de que System.Net.Http.HttpClientHandler.UseDefaultCredentials está definida para
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, recomenda-se criar um HttpClient que utilize explicitamente o processador baseado em NSURLSession para o iOS 7 e versões posteriores. O MSAL.NET cria automaticamente um HttpClient que usa NSURLSessionHandler para iOS 7 e versões posteriores. Para mais informações, leia a documentação do Xamarin iOS para o HttpClient.
Troubleshooting
Problema: Numa aplicação de ambiente de trabalho, a experiência de autorização não utiliza o HttpClient que defini
Solução:
Em aplicações de desktop e móveis, o MSAL abre um navegador e navega até à URL de autorização. Não utiliza HttpClient. Ao utilizar o navegador incorporado, pode controlar o proxy desse navegador seguindo a técnica descrita em: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Isto não é possível no .NET Core, onde apenas o navegador do sistema está disponível. A MSAL não tem controlo sobre o navegador do sistema.
Problema: O meu navegador consegue ligar-se ao proxy, mas recebo erros HTTP 407 do MSAL
Solução: HTTP 407 mostra um problema de autenticação proxy. O framework .NET utiliza as definições de proxy do IE, que por defeito não inclui a definição "UseDefaultCredential". Alguns utilizadores relataram ter corrigido este problema adicionando o seguinte ao seu ficheiro de .config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>