В настоящее время я пишу простой клиент на основе .NET Core для взаимодействия с кластерами Hadoop через WebHCat и пытаюсь выяснить, как проходить аутентификацию с помощью SPNEGO, как в случае с curl или Powershell Core.
Используя Curl, я могу запросить конечную точку состояния WebHCat следующим образом:
curl "http://10.2.0.9:50111/templeton/v1/status" --negotiate -k -u :
Тот же запрос также может быть выполнен в Powershell Core:
$client = New-Object System.Net.WebClient;
$client.UseDefaultCredentials = $true;
$client.DownloadString("http://10.2.0.9:50111/templeton/v1/status");
Однако, когда онприходит к выполнению следующего в .NET Core проекте, расположенном на том же сервере, что и кластер:
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace testauth
{
class Program
{
static async Task Main(string[] args)
{
var host = "http://10.2.0.9:50111/templeton/v1/status";
var handler = new HttpClientHandler
{
UseDefaultCredentials = true,
AllowAutoRedirect = true,
};
using (var client = new HttpClient(new LoggingHandler(handler)))
{
var res = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, host));
}
}
}
}
Я получаю следующую ошибку:
Unhandled Exception: System.ComponentModel.Win32Exception: GSSAPI operation failed with error - An invalid status code was supplied (Server not found in Kerberos database).
at System.Net.NTAuthentication.GetOutgoingBlob(Byte[] incomingBlob, Boolean throwOnError, SecurityStatusPal& statusCode)
Клиент работает .NETCore 2.1, как было упомянуто в , эта проблема Я должен просто иметь возможность передавать учетные данные по умолчанию в обработчик, и он будет работать, как и ожидалось.
Я также пытался написать тот же код, который яиспользуется в PowerShell Core в C # и, несмотря на то, что код идентичен, он все равно выдает ту же ошибку?
Единственное, что я могу дать, это то, что Kerberos подключенted к экземпляру Active Directory только с одним пользователем, и все эти запросы выполняются после того, как заявка для этого пользователя была создана с kinit
.