OAuth 2.0 In .NET With Instagram API

I am working on consuming the Instagram API and I am stuck at step 2 of their OAuth. I have a code from their redirect back to me, but then they want me to do a post with parameters like below…

curl 
    -F 'client_id=CLIENT-ID' 
    -F 'client_secret=CLIENT-SECRET' 
    -F 'grant_type=authorization_code' 
    -F 'redirect_uri=YOUR-REDIRECT-URI' 
    -F 'code=CODE' 
    https://api.instagram.com/oauth/access_token

I am implementing this as an ASP.NET MVC 3 solution. I tried to implement the post like so…

    WebRequest request = HttpWebRequest.Create("https://api.instagram.com/oauth/access_token");
    request.Method = "POST";
    request.Headers.Add("client_id", "sdlf0982jiejfopijfp92jjiwoijf90");
    request.Headers.Add("client_secret", "39993939393939393939393939393");
    request.Headers.Add("grant_type", "authorization_code");
    request.Headers.Add("redirect_uri", "http://localhost:34962/Home/Auth");
    request.Headers.Add("code", 111111);
    var response = request.GetResponse();
    return View();

This gives me a 400 error saying that “client_id is required”. I have included the client_id, but I’m clearly not implementing this correctly.

What is the “best practice” way to perform the second leg of the OAuth?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

I got the answer from the above mentioned SO post about adding POST parameters to an HttpWebRequest. Here are the details of my implementation.

NameValueCollection parameters = new NameValueCollection();
parameters.Add("client_id", "3498wjfoi2892jf0j2ij02fjakjf2");
parameters.Add("client_secret", "392621gfdlfj2k2hf7g2lfhj2g");
parameters.Add("grant_type", "authorization_code");
parameters.Add("redirect_uri", "http://localhost:34962/Home/Auth");
parameters.Add("code", code);

WebClient client = new WebClient();
var result = client.UploadValues("https://api.instagram.com/oauth/access_token", parameters);

var response = System.Text.Encoding.Default.GetString(result);

return View("Index", (object)response);

Method 2

I spent a lot of time on my task because i didn’t see response error.

        try
    {
        NameValueCollection parameters = new NameValueCollection();
        parameters.Add("client_id", "638ed32066b04801bd40aa05c1542915");
        parameters.Add("client_secret", "fc67cf3645a648ce82106298010acd65");
        parameters.Add("grant_type", "authorization_code");
        parameters.Add("redirect_uri", "http://localhost:34962/Test/InstagramCallback");
        parameters.Add("code", code);

        WebClient client = new WebClient();
        var result = client.UploadValues("https://api.instagram.com/oauth/access_token", "POST", parameters);

        return Encoding.Default.GetString(result);
    }
    catch (WebException ex)
    {
        StreamReader reader = new StreamReader(ex.Response.GetResponseStream());
        string line;
        StringBuilder result = new StringBuilder();
        while ((line = reader.ReadLine()) != null)
        {
            result.Append(line);
        }
        return result.ToString();
    }


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x