Пожалуйста помоги! Мне нужно мое приложение asp для запроса удаленных систем с учетными данными олицетворенного пользователя. Но всегда получаю 401 несанкционированную ошибку. Я сделал все настройки отсюда: https://stackoverflow.com/questions/10308938/unable-to-authenticate-to-asp-net-web-api-service-with-httpclient Kerberos настроен и работает в моем приложении и моем протестировать удаленное приложение (я вижу билеты Kerberos в скрипте). Делегирование, spns и все настроено.
Это мой код usnig System.Net.Http.httpclient:
HttpClientHandler handler = new HttpClientHandler()
{
UseDefaultCredentials = true,
PreAuthenticate = true
};
using (HttpClient client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Accept.Clear();
var method = new HttpMethod("GET");
var request = new HttpRequestMessage(method, "http://testdelegationapp.avp.ru/");
var response = client.SendAsync(request).Result;
}
Фактически http-запрос выполняется учетной записью Apppool (я получаю ошибку 401 при ограничении доступа к учетной записи Apppool в удаленном приложении IIS)
Здесь: Как заставить HttpClient передавать учетные данные вместе с запросом? утверждается, что HttpClient не может передать токен безопасности другому потоку, и лучше использовать синхронные методы System.Net.WebClient
Код с использованием веб-клиента:
var wi = (WindowsIdentity)HttpContext.User.Identity;
var wic = wi.Impersonate();
try
{
string URI = "http://testdelegationapp.avp.ru/";
using (WebClient wc = new WebClient())
{
wc.UseDefaultCredentials = true;
string response = wc.DownloadString(URI);
}
}
finally
{
wic.Undo();
}
Результат еще хуже, та же ошибка 401, но в скрипачке я вижу, что веб-клиент использует билет NTLM для доступа к удаленному приложению!
Настройка потоковых токенов вызывает потоки отсюда: Невозможно для аутентификации в службе ASP.NET Web Api с HttpClient тоже не помогает. SecurityContext.IsWindowsIdentityFlowSuppressed () имеет значение false.
WindowsIdentity.GetCurrent (). Name и Thread.CurrentPrincipal.Identity.Name показывает олицетворенного пользователя, как и должно быть.