通过OAuth 2连接到Google“redirect_uri的参数值无效:缺少权限:”

时间:2014-12-24 17:13:08

标签: asp.net-mvc-4 mono oauth-2.0 google-oauth

我正在尝试通过OAuth2连接到Google。我正在使用在另一个应用程序中运行的代码,所以我很确定问题出在Google的配置中。

我在Google控制台中注册了一个客户端ID和密钥,我将其添加到授权配置中:

var client = new GoogleOAuth2Client("[client id].apps.googleusercontent.com", "[secret key]");
var extraData = new Dictionary<string, object>();
OAuthWebSecurity.RegisterClient(client, "Google", extraData);

不幸的是,当我按下按钮进行连接时,我收到以下错误:

  
      
  1. 这是一个错误。

      错误:invalid_request
      
    redirect_uri的参数值无效:缺少权限:
    file:/// Account / ExternalLoginCallback%3FReturnUrl = /

    请求详细信息
    scope = https://www.googleapis.com/auth/userinfo.profile
    https://www.googleapis.com/auth/userinfo.email   
    RESPONSE_TYPE =代码   
    REDIRECT_URI =文件:///帐户/ ExternalLoginCallback%3FReturnUrl = /   
    状态= 提供商 =谷歌&安培;的 SID = [号码]   client_id = [客户端ID] .apps.googleuserconte
  2.   

我已尝试将/etc/hosts文件中的localhost参数更改为其他基本网址,并且已添加这些位置以重定向Google控制台中的URI,如下所示:

http://localhost:8080/Account/ExternalLoginCallback%3FReturnUrl=/ 
http://localhost.example.com:8080/Account/ExternalLoginCallback
http://localhost.example.com:8080/Account/ExternalLoginCallback%3FReturnUrl=/

错误仍然存​​在。我不知道问题是什么,我希望有人可以给我一些指导。感谢

1 个答案:

答案 0 :(得分:9)

在按下连接按钮时发送给Google的授权请求中redirect_uri参数的值必须设置为您在Google API控制台中为您的客户注册的值之一。所以不要传递:

file:///Account/ExternalLoginCallback%3FReturnUrl=/

你应该通过例如。

http://localhost:8080/Account/ExternalLoginCallback%3FReturnUrl=/

但正确地进行了URL编码:

http%3A%2F%2Flocalhost%3A8080%2FAccount%2FExternalLoginCallback%253FReturnUrl%3D%2F

请参阅示例代码:https://github.com/mj1856/DotNetOpenAuth.GoogleOAuth2/blob/master/DotNetOpenAuth.GoogleOAuth2/GoogleOAuth2Client.cs