Vrankela
Vrankela

Reputation: 1202

How do I get token from fiware lab to access context broker placed behind PeP proxy?

I tried to use the logic of this curl command:

curl -s --insecure -i --header ${AUTH_BASIC} --header ${CONTENT_TYPE} -X POST https://idm/oauth2/token -d ${DATA}"
    XAUTH_TOKEN="$(eval ${REQUEST} | grep -Po '(?<="access_token": ")[^"]*')"
    echo "X-Auth-Token for '${_user}': ${XAUTH_TOKEN}

to write the request in c#:

//GETTING TOKEN...
            String input2 = "'grant_type=password&username=<MyUsername on Lab .fiware.org&password=<myPassword>&client_id=<myClientID>&client_secret=<myClientSecret>'";
            var httpWebRequest2 = (HttpWebRequest)WebRequest.Create("https://account.lab.fiware.org/oauth2/token");
            httpWebRequest2.ContentType = "application/x-www-form-urlencoded";
            //httpWebRequest2.Accept = "application/json";
            string authInfo = "0555996e09f340d08a4baa8fff94f8c4" + ":" + "a62333f7045b4ab797669c28f9d26d30";
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            httpWebRequest2.Headers["Authorization"] = "Basic " + authInfo;
            httpWebRequest2.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest2.GetRequestStream()))
            {
                streamWriter.Write(input2);
                streamWriter.Flush();
                streamWriter.Close();
            }

            var httpResponse2 = (HttpWebResponse)httpWebRequest2.GetResponse();
            using (var streamReader = new StreamReader(httpResponse2.GetResponseStream()))
            {
                string result = streamReader.ReadToEnd();
                Console.WriteLine(result);
            }

But I get the following error:

enter image description here

When I tried doing this solution in localhost, like in the post here it works without a problem. Could it have anything to do with the fact that I registered the app under localhost:1307 in the lab account?

Upvotes: 1

Views: 200

Answers (1)

albertinisg
albertinisg

Reputation: 491

There are not enough details to debug it, but KeyRock returns 400 when the request it's not well formed. You should get the message KeyRock returns. Still, with this request, you can get code 400 if:

  • The Authorization: Basic header is missing, in which case you will get:

    HTTP/1.1 400 BAD REQUEST
    Date: Thu, 10 Sep 2015 08:43:25 GMT
    Server: Apache/2.4.7 (Ubuntu)
    Vary: Accept-Language,Cookie
    X-Frame-Options: SAMEORIGIN
    Content-Language: en
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=utf-8
    
    Authentication header missing. Use HTTP Basic.
    
  • The request body (i.e. your input2) is not being sent, in which case you will get:

    HTTP/1.1 400 Bad Request
    Date: Thu, 10 Sep 2015 08:47:49 GMT
    Server: Apache/2.4.7 (Ubuntu)
    Vary: Accept-Language,Cookie
    X-Frame-Options: SAMEORIGIN
    Content-Language: en
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: application/json
    
    {"error": {"message": "create_access_token() takes exactly 3 arguments (2 given)", "code": 400, "title": "Bad Request"}}
    
  • The grant_type is not defined in your request body:

    HTTP/1.1 400 Bad Request
    Date: Thu, 10 Sep 2015 08:52:58 GMT
    Server: Apache/2.4.7 (Ubuntu)
    Vary: Accept-Language,Cookie
    X-Frame-Options: SAMEORIGIN
    Content-Language: en
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: application/json
    
    {"error": {"message": "grant_type missing in request body: {}", "code": 400, "title": "Bad Request"}}
    

Upvotes: 2

Related Questions