通过 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