社内アプリケーションに Google の Oauth2 を実装したいと考えており、C# コンソール アプリを使用してここにあるデモを試していました。
必要なすべての Google API ライブラリをプロジェクト (コア クライアント、YouTube、連絡先など) に追加し、アプリケーションを登録しました…..
プログラムを実行すると、許可されたクライアントなどからアクセス コードを取得できます……正しい clientID、ClientSecret キーを使用しています…….
最終的に例外が発生します。リモートサーバーがエラーを返しました: (400) Bad Request.
このメソッドからスローされます:
public static void GetAccessToken(OAuth2Parameters parameters) {
OAuthBase.GetOAuth2AccessToken(parameters, OAuthBase.GetExchangeAccessCodeRequestBody(parameters));
}
どの呼び出し:
public static void GetOAuth2AccessToken(OAuth2Parameters parameters, String requestBody) { Uri requestUri = new Uri(parameters.TokenUri); WebRequest リクエスト = WebRequest.Create(requestUri); request.Method = "POST";
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: