Как программно аутентифицироваться в HDFS в fiware cosmos

Я пишу.net приложение с C# для программного запуска REST apis против hdfs на fiware, но при операциях http POST это не удается с 401 (доступ запрещен). это работает для простых операций GET, но я не уверен, как сделать аутентификацию. Из спецификации кажется, что SPEGNA и делегированные токены аутентификации являются двумя вариантами, но как мне сделать это программно? У меня есть только имя пользователя и пароль, чтобы выйти из. Я использую библиотеку RestSharp, чтобы упростить взаимодействие с другими.

Этот код работает

var client = new RestClient("http://cosmos.lab.fi-ware.org:14000");
request = new RestRequest("webhdfs/v1/user/<userID>");
request.AddParameter("op", "LISTSTATUS");
request.AddParameter("user.name", "<userID>");
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

этот код не работает с http 401

var client = new RestClient("http://cosmos.lab.fi-ware.org:14000");
var request = new RestRequest("webhdfs/v1/user/<userID>/structured_data123.txt",Method.PUT);
request.AddParameter("op", "CREATE");
request.AddParameter("user.name", "<userID>");
IRestResponse response = client.Execute(request);

Статус HTTP 401 - org.apache.hadoop.security.authentication.client.AuthenticationException: анонимные запросы запрещены

Мысли? идеи? заранее спасибо!

1 ответ

Не будучи экспертом по RestSharp, я видел addParameter Метод поддерживает 5 типов параметров ( ссылка).

В соответствии с этими 5 типами для запроса WebHDFS необходимо, чтобы параметры имели тип "QueryString" (параметры должны быть добавлены в URI запроса и не должны быть частью тела запроса);

request.AddParameter("op", "CREATE", ParameterType.QueryString);
request.AddParameter("user.name", "<userID>", ParameterType.QueryString);
Другие вопросы по тегам