Как программно аутентифицироваться в 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);