Google Open Auth 2.0在服务器端获得access_token(错误请求错误,ProtocolError)
我正在尝试通过Google Open Auth 2.0实现用户身份validation。 我已经成功获得了Google的“代码”,现在我正在尝试获取access_token来访问用户的信息。 这是控制器的代码:
public void Google(string code) { if (!string.IsNullOrWhiteSpace(code)) { var parameters = new Dictionary(); parameters["code"] = code; parameters["client_id"] = ConfigurationProvider.GoogleApplicationId; parameters["client_secret"] = ConfigurationProvider.GoogleClientSecret; parameters["redirect_uri"] = "http://localhost:1291" + Url.Action("GoogleAuth"); parameters["grant_type"] = "authorization_code"; var keyValuePairs = new string[parameters.Count]; var i = 0; const string keyValueTemplate = "{0}={1}"; foreach (var parameter in parameters) { keyValuePairs[i] = string.Format(keyValueTemplate, parameter.Key, parameter.Value); i++; } var parametersString = string.Join("&", keyValuePairs); // code=CODE&client_id=MY.apps.googleusercontent.com&client_secret=SECRET&redirect_uri=http://localhost:1291/Account/GoogleAuth&grant_type=authorization_code const string uri = "https://accounts.google.com/o/oauth2/token"; var webClient = new WebClient(); webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; webClient.UploadString(uri, "POST", parametersString); // Here I get Bad Request exception. } }
此exception还包含等于“ProtocolError”的Status。 即使我尝试使用空parametersString进行POST,我也有同样的错误。
我会感激任何建议或意见。
谢谢
编辑:我也试过这个片段有和没有参数(有相同的错误):
var data = new NameValueCollection { {"code", code}, {"client_id", ConfigurationProvider.GoogleApplicationId}, {"client_secret", ConfigurationProvider.GoogleClientSecret}, {"redirect_uri", "http://localhost:1291" + Url.Action("GoogleAuth")}, {"grant_type", "authorization_code"} }; var webClient = new WebClient(); webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; // with and without this header... var result = webClient.UploadValues(uri, "POST", data);
您的redirect_uri必须正确转义,否则您会收到格式错误的url。
parameters["redirect_uri"] = Uri.EscapeDataString(_redirectUri);
- (OAuthException – #2500)必须使用活动访问令牌来查询有关当前用户的信息
- 无法将类型为“System.Web.HttpInputStream”的对象强制转换为“System.IO.FileStream”MVC 3
- Telerik MVC Grid Ajax具有手动绑定function
- ASP.NET MVC 3自定义操作filter – 如何将传入模型添加到TempData?
- 如何在asp.net mvc3中创建自定义授权filter
- ASP.NET MVC ActionFilterAttribute在模型绑定之前注入值
- 如何将图标集上的区域映射到按钮?
- 如何转换我的分页function以使用AJAX Insead?
- MVC asp.net序列化如何在Controller动作上为Json对象工作?