Google OAuth Token Error - 400 Bad Request

I am trying to authenticate my application using OAuth2 and use the thread of installed applications (get the authentication code and then request a token). I get 400 bad request error when requesting a token in the GetResponse () line. My code is as follows:

 Public Sub New() Dim tokenRequest As WebRequest = WebRequest.Create("https://accounts.google.com/o/oauth2/token") Dim requestString As String = "code=<auth-code>" _ & "&client_id=<client_id>" _ & "&client_secret=<client_secret>" _ & "&redirect_uri=http://localhost" _ & "&grant_type=authorization_code" byteArray = StrToByteArray(System.Web.HttpUtility.UrlEncode(requestString)) tokenRequest.Credentials = CredentialCache.DefaultCredentials tokenRequest.Method = "POST" tokenRequest.ContentLength = byteArray.Length tokenRequest.ContentType = "application/x-www-form-urlencoded" Dim dataStream As Stream = tokenRequest.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() Console.WriteLine("Getting response...") 'Get response Try Dim response As WebResponse = tokenRequest.GetResponse() Console.WriteLine(CType(response, HttpWebResponse).StatusDescription) Dim data As Stream = response.GetResponseStream Array.Resize(byteArray, 4096) Array.Clear(byteArray, 0, byteArray.Length) data.Read(byteArray, 0, byteArray.Length) response.Close() Catch wex As WebException Console.WriteLine("ERROR! : ") Console.WriteLine(wex.Message) Console.WriteLine(wex.Status) Console.WriteLine(wex.Data) Console.WriteLine(wex.InnerException.Message) Console.WriteLine(wex.HelpLink) End Try End Sub 

The specifics of the error are below:

 The remote server returned an error: (400) Bad Request. 7 System.Collections.ListDictionaryInternal System.NullReferenceException: Object reference not set to an instance of an obj ect. at GADownload.GoogleAnalytics..ctor() in ***.vb:line 86 at GADownload.Main1.Main(String[] args) in ****.vb:line 18 

I looked at Google GetAccessToken: Bad Request 400 and Google GData.Net OAuthUtil.GetAccessToken 400 Bad Request , but did not find a solution suitable for this code. I already checked all the proposed solutions and implemented them, but so far no luck.

+6
source share
2 answers

it looks like you are not setting values ​​for the auth-code , client_id or client_secret parameters .

you can debug these parameters with the curl command to find out if this is the source of the problem. eg

 curl -X POST -d "code=<auth-code>&client_id=<client_id>&client_secret=<client_secret>"&grant_type=authorization_code" http://localhost:8000/auth/token 
0
source

You can try the redirect_uri url redirect_uri = http: // localhost

This is the only thing I see in your code against mine. Here is my code that looks like vb and works

 Dim sb As New StringBuilder sb.Append("code=").Append(Request.QueryString("code")) _ .Append("&client_id=") _ .Append(Session.Item("ClientID")) _ .Append("&client_secret=") _ .Append(Session.Item("ClientSecret")) _ .Append("&redirect_uri=") _ .Append(HttpUtility.UrlEncode("http://localhost/1.aspx")) _ .Append("&grant_type=authorization_code") Dim requestGoogle As HttpWebRequest = WebRequest.Create("https://accounts.google.com/o/oauth2/token") requestGoogle.Method = "POST" requestGoogle.ContentType = "application/x-www-form-urlencoded" requestGoogle.ContentLength = sb.Length Dim byteArray As Byte() = Encoding.UTF8.GetBytes(sb.ToString) sb.Clear() requestGoogle.GetRequestStream.Write(byteArray, 0, byteArray.Length) byteArray = Nothing Dim responseGoogle As HttpWebResponse = requestGoogle.GetResponse() If responseGoogle.StatusCode = HttpStatusCode.OK Then Dim sr As StreamReader = _ New StreamReader(responseGoogle.GetResponseStream) Dim s As String = sr.ReadToEnd sr.Close() responseGoogle.GetResponseStream.Close() requestGoogle.GetRequestStream.Close() 'Response.Write(s) End If 
0
source

Source: https://habr.com/ru/post/950011/


All Articles