Как использовать существующий билет Kerberos для вызова веб-API с Mac? - PullRequest
0 голосов
/ 05 февраля 2019

Короткая версия:
Как использовать существующий билет 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.

...