I am trying to exchange a Google Plus one-time authorization code for an access token. But I keep getting 400 Bad Request. I am using VB.NET. Here is the code:
'We should now have a "good" one-time authorization code stored in "code" Using Client As New WebClient() 'Dim Client As New WebClient() Dim values As New NameValueCollection() Dim Resp Dim responseString As String values("code") = Request.QueryString("code") values("client_id") = ConfigurationManager.AppSettings("google.clientid") values("client_secret") = ConfigurationManager.AppSettings("google.clientsecret") values("grant_type") = "authorization_code" values("redirect_uri") = "http://localhost:3333/MyVacations/default.aspx" Resp = Client.UploadValues("https://www.googleapis.com/oauth2/v3/token", values) responseString = Encoding.Default.GetString(Resp) End Using
I'm sure this is the endpoint that I should use https://www.googleapis.com/oauth2/v3/token , but who knows? The Google Discovery document just bothers me with this.
Also, please forgive my naivety, but will someone explain how the POST code used by Google as an example relates to the web request in my code above? I think I understand how values ββare converted, but 3 header lines in POST (below) ... how is this defined in VB code? I am missing something that should be really obvious to others, so if you know, please tell me.
POST /oauth2/v3/token HTTP/1.1 Host: www.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=8819981768.apps.googleusercontent.com& client_secret={client_secret}& redirect_uri=https://oauth2-login-demo.appspot.com/code& grant_type=authorization_code
Another Post overflow Post says something about sending data as request parameters (using "&", I think) instead of sending data as request headers, so is there something wrong with sending by NameValueCollection?
source share