How to get access token for google oauth?

33,008

Solution 1

I think you are sending the POST request to the wrong endpoint, the correct one is https://accounts.google.com/o/oauth2/token

Solution 2

As I had similar problems in the process of implementing Google auth, I will post the code that works.. The last mentioned problem: error (400) Bad request could be caused by leading '?' in the above code..

 string codeClient = "code="+ t +"&client_id=number.apps.googleusercontent.com&";
 string secretUri = "client_secret=yoursecret&" + "redirect_uri=path&"
      + "grant_type=authorization_code";
 postString = codeClient + secretUri;

 string url = "https://accounts.google.com/o/oauth2/token";

 HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url.ToString());
 request.Method = "POST";
 request.ContentType = "application/x-www-form-urlencoded";

 UTF8Encoding utfenc = new UTF8Encoding();
 byte[] bytes = utfenc.GetBytes(postString);
 Stream os = null;
 try
 {
      request.ContentLength = bytes.Length;
      os = request.GetRequestStream();
      os.Write(bytes, 0, bytes.Length);
 }
 catch
 { }

 try
 {
      HttpWebResponse webResponse = (HttpWebResponse) request.GetResponse();
      Stream responseStream = webResponse.GetResponseStream();
      StreamReader responseStreamReader = new StreamReader(responseStream);
      result = responseStreamReader.ReadToEnd();//parse token from result

Solution 3

My code is working, I have done mistakes in above two lines. It should be like this

byte[] buffer = Encoding.ASCII.GetBytes("code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");

Remaining code is correct.

Share:
33,008
Sagar
Author by

Sagar

Updated on July 09, 2022

Comments

  • Sagar
    Sagar almost 2 years

    I am using C# (ASP.NET). I want to use Google OAuth for accessing the user profile detail in my app. I successfully got the authorization code but having a problem in getting the access token. I prefer the Google tutorials. In tutorial, I read that I have to send the request and get the response from google. For that, I use System.Net.HttpWebRequest/HttpWebResponse (am I going in the right way). I have used this code...

    byte[] buffer = Encoding.ASCII.GetBytes("?code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code");
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://accounts.google.com");
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    req.ContentLength = buffer.Length;
    
    Stream strm = req.GetRequestStream();
    strm.Write(buffer, 0, buffer.Length);
    strm.Close();
    
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    Response.Write(((HttpWebResponse)resp).StatusDescription);
    

    But, I got the error:

    The remote server returned an error: (405) Method Not Allowed.

    Update: Here variable code is authorization code.

  • Sagar
    Sagar over 11 years
    I use this, but it shows me other error. Now error is The remote server returned an error: (400) Bad Request. Where am I going wrong?
  • Claudio Cherubino
    Claudio Cherubino over 11 years
    Drill down into the details of the exception, the complete error message will tell you what is wrong with your request
  • jp2code
    jp2code over 8 years
    @Viktor: I notice your client id and client secret are both included in the buffer. My hosted website does not have SSL. Do you know if Google will accept my web request from a non SSL connection? Obviously, it would not be safe, and someone could snipe my credentials, but I don't know a way around it.
  • Neno
    Neno almost 7 years
    @Sahil, make sure that oauth url is the valid one. Note that I used this code snippet almost 5 years ago.
  • Sahil Bhatia
    Sahil Bhatia almost 7 years
    @CyberNinja see my code in this same forum. It works perfect. Let me know for any other issue.
  • CyberNinja
    CyberNinja almost 7 years
    @SahilBhatia what I mean is how do you get the code that you pass as your param, like how do you request that from google thru .net code? I know you can request that via url as a request_type in the browser but it will ask me to login in.
  • CyberNinja
    CyberNinja almost 7 years
    how do I get the Authentication code from google?. I wanted to use your code so I dont have to use key.json file and just use an app config for my client id and client secret.If you could share how to get the authorization code, that would be awesome.
  • Techiemanu
    Techiemanu over 5 years
    I tried in similar way but getting the bad response, can someone help ?.
  • thomasgalliker
    thomasgalliker over 2 years
    I stopped reading at "does not have SSL". Use SSL.