Oauth2:远程服务器返回了一个错误:(400)Bad Request

本文关键字:一个 错误 Request Bad 服务器 返回 Oauth2 | 更新日期: 2023-09-27 18:11:07

我想在内部应用程序中实现Google的Oauth2,并且正在使用c#控制台应用程序玩这里找到的演示:

https://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/samples/oauth2_sample/oauth2demo.cs

我已经添加了所有必要的谷歌API库到我的项目(核心客户端,YouTube,联系人......),并注册了我的应用程序.....

当我执行程序时,我能够从授权客户端等获得访问码......我使用正确的clientID, ClientSecret密钥.......

我最终得到一个异常:远程服务器返回一个错误:(400)Bad Request.

从这个方法抛出:

    public static void GetAccessToken(OAuth2Parameters parameters) {
      OAuthBase.GetOAuth2AccessToken(parameters, OAuthBase.GetExchangeAccessCodeRequestBody(parameters));
    }

调用:

public static void GetOAuth2AccessToken(OAuth2Parameters参数,String requestBody) {Uri requestUri = new Uri(parameters.TokenUri);WebRequest请求= WebRequest. create (requestUri);请求。

        request.ContentType = "application/x-www-form-urlencoded";
        Stream outputStream = request.GetRequestStream();
        StreamWriter w = new StreamWriter(outputStream);
        w.Write(requestBody);
        w.Flush();
        w.Close();
        WebResponse response = request.GetResponse();
        string result = "";
        if (response != null) {
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream);
            result = reader.ReadToEnd();
            Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(result);
            if (dict.ContainsKey(OAuth2AccessToken)) {
              parameters.AccessToken = dict[OAuth2AccessToken];
            }
            if (dict.ContainsKey(OAuth2RefreshToken)) {
              parameters.RefreshToken = dict[OAuth2RefreshToken];
            }
            if (dict.ContainsKey(OAuth2TokenType)) {
              parameters.TokenType = dict[OAuth2TokenType];
            }
            if (dict.ContainsKey(OAuth2ExpiresIn)) {
              parameters.TokenExpiry = DateTime.Now.AddSeconds(int.Parse(dict[OAuth2ExpiresIn]));
            }
        }
    }

有没有人能解释一下是什么导致了下面的错误?

System.Net.WebException was unhandled
  HResult=-2146233079
  Message=The remote server returned an error: (400) Bad Request.
  Source=System
  StackTrace:
       at System.Net.HttpWebRequest.GetResponse()
       at Google.GData.Client.OAuthBase.GetOAuth2AccessToken(OAuth2Parameters parameters, String requestBody) in c 'Development'lib'YouTube'libgoogle-data-mono-2.1.0.0'src'core'oauthbase.cs:line 435
       at Google.GData.Client.OAuthUtil.GetAccessToken(OAuth2Parameters parameters) in c:' 'lib'YouTube'libgoogle-data-mono-2.1.0.0'src'core'oauthutil.cs:line 246
       at GoogleAppsConsoleApplication.OAuth2Demo.Main(String[] args) in c:'Users'test'Documents'Visual Studio 2012'Projects'GoogleAppsConsoleApplication'GoogleAppsConsoleApplication'Program.cs:line 60
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

Oauth2:远程服务器返回了一个错误:(400)Bad Request

您正在使用旧的gdata协议。我建议您使用Google api客户端库。有关如何使用OAuth2的详细信息,请参阅https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2。

相关文章: