6

私はOAuth2を使ってアプリケーションを認証しようとしていますが、「インストールされたアプリケーション」フロー(認証コードを取得してからトークンを要求します)を使用しています。 GetResponse()行でトークンを要求するときに私は400 bad request errorを得ています。次のように私のコードは次のとおりです。Google OAuthトークンエラー - 400 Bad Request

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 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 

私はGoogle GetAccessToken : Bad Request 400Google GData .Net OAuthUtil.GetAccessToken 400 Bad Requestを見て持っていたが、このコードに適した解決策を見つけていません。私はすでに提案されているすべてのソリューションをチェックして実装しましたが、これまでのところ運がありません。あなたはパラメータのauth-コードのclient_idまたはclient_secretの値を設定していないよう

答えて

0

が見えます。

curlコマンドでこれらのパラメータをデバッグして、これが問題の原因かどうかを確認できます。例えば

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

私は私の対あなたのコードに見ている唯一のものであるURLエンコードREDIRECT_URI REDIRECT_URI = http://localhost

を試すことができます。ここで私のコードはvbと作業で似ています

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 
関連する問題