Sto tentando di scambiare un codice di autorizzazione Google Plus una tantum per un token di accesso. Ma continuo a ricevere una 400 Bad Request. Sto usando VB.NET. Ecco il codice:Endpoint token API Google Il POST restituisce Bad Request 400
'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
Sono abbastanza sicuro che questo è il punto finale che dovrei essere usando https://www.googleapis.com/oauth2/v3/token ma chi lo sa? Il Google Discovery Document mi confonde solo questo.
Anche perdonare la mia ingenuità ma qualcuno potrebbe spiegare come il codice POST che Google utilizza come esempio si riferisce alla richiesta Web nel mio codice sopra? Penso di capire come traducono i valori, ma le 3 linee di intestazione nel POST (sotto) ... come viene specificato nel codice VB? Mi manca qualcosa che deve essere evidente agli altri, quindi se lo sai, per favore dimmelo.
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
Un'altra Stack Overflow Post dice qualcosa circa l'invio dei dati come parametri di query (usando '&' credo) invece di inviare i dati come intestazioni di richiesta, è così c'è qualcosa di sbagliato con l'invio di un lungo NameValueCollection?
Il tuo redirect_uri corrisponde al valore utilizzato per ottenere il codice di autorizzazione? –
In base alla risposta restituita dal POST, ottengo un uri_redirect_mismatch, quindi hai ragione. Ma ho copiato e incollato l'URL direttamente dalla Developer Console nel mio codice e viceversa, quindi sono in perdita sul perché questo sta accadendo. –