How to programmatically authenticate to HDFS in fiware cosmos

147 views Asked by At

I'm writing a .net application with C# to programmatically run REST apis against hdfs on fiware but on http POST operations it fails with 401 (access denied). it works for simple GET operations but I'm not sure how to do authentication. From the spec it seems SPEGNA and delegated auth tokens are two options but how do i do this programmatically? I only have my user name and password to go off of. I'm using the RestSharp library to make rest interactions easier.

This code works

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

this code fails with 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 Status 401 - org.apache.hadoop.security.authentication.client.AuthenticationException: Anonymous requests are disallowed

Thoughts? ideas? thank you in advance!

1

There are 1 answers

0
frb On

Without being an expert on RestSharp, I've seen the addParameter method supports 5 types of parameters (link).

According to those 5 types, WebHDFS request needs the parameters are of type "QueryString" (the parameters must be added to the request URI and not be part of the request body);

request.AddParameter("op", "CREATE", ParameterType.QueryString);
request.AddParameter("user.name", "<userID>", ParameterType.QueryString);