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

Posted

技术标签:

【中文标题】通过 OAuth 2 连接到 Google“redirect_uri 的参数值无效:缺少权限:”【英文标题】:Connecting to Google via OAuth 2 "Invalid parameter value for redirect_uri: Missing authority: " 【发布时间】:2015-02-22 18:24:34 【问题描述】:

我正在尝试通过 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);

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

    这是一个错误。错误:invalid_requestredirect_uri 的参数值无效:缺少权限: file:///Account/ExternalLoginCallback% 3FReturnUrl=/请求详情 scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email response_type=代码 redirect_uri=file:///Account/ExternalLoginCallback%3FReturnUrl=/ state=provider=google&sid=[数字] client_id=[客户端 ID].apps.googleuserconte

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

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

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

【问题讨论】:

【参考方案1】:

在按下按钮进行连接时发送给 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

【讨论】:

以上是关于通过 OAuth 2 连接到 Google“redirect_uri 的参数值无效:缺少权限:”的主要内容,如果未能解决你的问题,请参考以下文章

Gmail插件可在没有oAuth的情况下连接到非Google服务

无需 oAuth 即可连接到非 Google 服务的 Gmail 插件

如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?

将 ColdFusion 连接到 Google Bigquery

Google Gmail API OAuth 2.0 错误 400:redirect_uri_mismatch

通过 node-red 将 Python 连接到网页