Короткая версия:
Как использовать существующий билет Kerberos для аутентификации вызова Web API из приложения .NET Core (или собственной библиотеки) в MacOS?
LongИстория:
У меня есть веб-API, доступный в интрасети нашей компании, в котором включена поддержка Kerberos в IIS.Он возвращает JSON (application/json
) и файлы (application/octet-stream
).
У меня есть компания Mac с Enterprise Connect, которая успешно получила билет Kerberos для нашего домена.Я вижу это в приложении TicketViewer.
Наконец, у меня есть приложение .NET Core, пытающееся вызвать Web API и получить jsons и файлы, проходящие аутентификацию с помощью Kerberos.
Я попробовал простой сценарий, такой как:
HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true })
{
BaseAddress = new Uri("https://MY.WEBAPI.URL/")
};
string result = client.GetAsync("MYENDPOINT").Result.Content.ReadAsStringAsync().Result;
..., который отлично работает на ноутбуках нашей компании Windows, но не работает на Mac, выдает исключение, например:
GssApiException: операция GSSAPIошибка с ошибкой - указанное имя не было именем механизма.(неизвестный механический код 0 для неизвестного механика).
И когда я пытаюсь
CredentialCache credentials = new CredentialCache()
{ {
new Uri("https://MY.WEBAPI.URL/"),
"Kerberos",
CredentialCache.DefaultNetworkCredentials
} };
HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = credentials })
{
BaseAddress = new Uri("https://MY.WEBAPI.URL/")
};
string result = client.GetAsync("MYENDPOINT").Result.Content.ReadAsStringAsync().Result;
... я получаю стандартное сообщение 401 Несанкционированная ошибка с сервера.
Я немного погуглил, но ничего не могу найти по этому вопросу.
Буду признателен за любую помощь!
ПРИМЕЧАНИЕ : Мы в порядке с делегированием вызовов Web APIв нативную библиотеку, написанную на Obj-C или Swift и P / Invoke, если по какой-то причине .NET Core не имеет возможности использовать билет Kerberos.