How to get access token for google oauth?
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.
Sagar
Updated on July 09, 2022Comments
-
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 over 11 yearsI 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 over 11 yearsDrill down into the details of the exception, the complete error message will tell you what is wrong with your request
-
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 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 almost 7 years@CyberNinja see my code in this same forum. It works perfect. Let me know for any other issue.
-
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 almost 7 yearshow 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 over 5 yearsI tried in similar way but getting the bad response, can someone help ?.
-
thomasgalliker over 2 yearsI stopped reading at "does not have SSL". Use SSL.