#c# #authentication #post #httpclient #kerberos
#c# #проверка подлинности #Публикация #httpclient #kerberos
Вопрос:
У меня есть некоторый сервис, который представляет собой SOAP API, размещенный на компьютере Windows Server, защищенном проверкой подлинности Kerberos. Я хотел бы использовать этот API с использованием .NET Core. На данный момент я использовал какой-то WCF-клиент с базовой аутентификацией. Итак, я использовал некоторый интерфейс, полученный из wsdl, и после предоставления некоторых учетных данных все было в порядке. Теперь я должен переключиться на Kerberos.
На сервере настроены SPN, и я получил файл keytab с участниками.
Насколько я знаю, это не такой простой случай, поэтому я подготовил некоторую разделяемую библиотеку на C для получения значения заголовка согласования (он использует участников из соответствующей keytab). Я включил эту библиотеку в проект .net core с помощью DllImport, и все работает нормально. Я могу подключиться к API, получить заголовок согласования, а также получить билет с помощью kinit
kinit -V HTTP/test.test.com@test.com
работает нормально.
Когда у меня уже есть значение заголовка для согласования, я хотел бы сделать простой POST-запрос (используя HttpClient) с правильным значением заголовка (ticket), но всегда я получал 401 неавторизованный.
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("http://example.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "some-type");
httpClient.DefaultRequestHeaders.Add("Content-Type", "some-type");
httpClient.DefaultRequestHeaders.Add("Authorization", "Negotiate XYZAA....."
// ...
}
В качестве тела я отправляю простой SOAP-конверт, который подходит.
Должен ли я хранить что-то еще сразу после получения билета, или достаточно просто добавить этот билет к каждому исходящему запросу, как показано выше?