Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Бывают случаи, когда разработчикам требуется более тонко управлять экземпляром HttpClient, например настроить прокси или использовать эффективные механизмы ASP.NET Core для пула HttpClient. Дополнительные сведения см. в документе HttpClientFactory для реализации отказоустойчивых HTTP-запросов. Чтобы настроить HttpClient, разработчикам потребуется реализовать IMsalHttpClientFactory, который MSAL будет использовать для получения HttpClient каждого HTTP-запроса.
Рекомендации по реализации IMsalHttpClientFactory
- См. System.Net.Http.HttpClient примеры масштабируемых .NET фабрик, которые можно адаптировать для этого интерфейса, например
IHttpClientFactoryASP.NET Core. - Реализации должны быть потокобезопасны.
- Не создавайте новый
HttpClientвGetHttpClient, так как это приведет к исчерпанию портов. - MSAL не будет вызывать
Dispose()дляHttpClient. - Если приложение использует встроенную проверку подлинности Windows, убедитесь, что System.Net.Http.HttpClientHandler.UseDefaultCredentials имеет значение
true.
Пример реализации
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = ConfidentialClientApplication.Create("client_id")
.WithHttpClientFactory(httpClientFactory)
.Build();
Простая реализация 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 и Xamarin iOS
При использовании Xamarin iOS рекомендуется создать HttpClient, который явно использует обработчик на основе NSURLSession для iOS 7 и более новых версий. MSAL.NET автоматически создает объект HttpClient, использующий NSURLSessionHandler в iOS 7 и более поздних версиях. Дополнительные сведения см. в документации по Xamarin iOS для HttpClient.
Troubleshooting
Проблема: в настольном приложении процесс авторизации не использует определённый мной HttpClient
Решение:
В классических и мобильных приложениях MSAL открывает браузер и переходит к URL-адресу авторизации. Он не использует HttpClient. При использовании встроенного браузера вы можете настроить для него прокси, следуя описанному здесь способу: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Это невозможно в .NET Core, где доступен только системный браузер. MSAL не контролирует системный браузер.
Проблема. Мой браузер может подключиться к прокси-серверу, но у меня возникают ошибки HTTP 407 из MSAL
Решение: HTTP 407 показывает проблему проверки подлинности прокси-сервера. .NET платформа использует параметры прокси-сервера из IE, которые по умолчанию не включают параметр UseDefaultCredential. Некоторые пользователи сообщили об устранении этой проблемы, добавив в файл .config следующее:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>