授权错误,错误400:redirect_uri_mismatch Gmail API



我遵循Ruby Gmail API快速启动指南,授权用户使用Gmail API。我在谷歌控制台上创建了一个Web Application类型的应用程序,并生成了它的credentials.json文件(并将其放在quickstart.rb旁边(。我为该应用程序提供了redirect_uri,该应用程序作为heroku上的rails应用程序托管。url的格式如下

https://myapp-api-heroku.com/my_redirect_endpoint

当我运行quickstart.rb时,它在控制台中显示以下消息

在浏览器中打开以下URL并输入生成的代码授权后:https://accounts.google.com/o/oauth2/auth?access_type=offline&approvel_prompt=强制&client_id=my_client_id_here&include_grandted_scope=true&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=代码&范围=https://www.googleapis.com/auth/gmail.readonly

在浏览器中打开链接后,它显示此错误

请求中的重定向URI urn:ietf:wg:oauth:2.0:oob只能由本机应用程序的客户端ID使用。不允许用于WEB客户端类型。您可以在以下位置为本机应用程序创建客户端IDhttps://console.developers.google.com/apis/credentials/oauthclient

我已经在相应应用程序的谷歌控制台上注册了提供的redirect_uri。我找不到是什么导致了这个问题。我最终想从我的rails应用服务器调用这个Gmail API,但我无法继续。

有几种类型的auth,让我们看看其中的两种。第一种是web,它将被设计为在web服务器上工作,在那里授权被返回给web服务器本身来处理它。第二种是已安装的应用程序,它将返回响应到本地主机或发送Reqest的端点。

下面的Ruby快速启动代码在顶部表示,它被设计为作为控制台应用程序或已安装的应用程序工作,这就是为什么您看到urn:ietf:wg:oauth:2.0:oob,这意味着localhost

完成本页其余部分中描述的步骤,创建一个简单的Ruby命令行应用程序,用于向Gmail API发出请求。

用于对两种不同类型的客户端进行身份验证的代码不同。您的示例中的代码被设计为与已安装的应用程序一起工作。要使其工作,您需要在google开发者控制台上创建已安装的本机凭据。您已经创建了web凭据,但该凭据无法与您正在使用的代码一起工作。

对于web服务器应用程序,您应该遵循webauth

require 'google/apis/drive_v2'
require 'google/api_client/client_secrets'
client_secrets = Google::APIClient::ClientSecrets.load
auth_client = client_secrets.to_authorization
auth_client.update!(
:scope => 'https://www.googleapis.com/auth/drive.metadata.readonly',
:redirect_uri => 'http://www.example.com/oauth2callback',
:additional_parameters => {
"access_type" => "offline",         # offline access
"include_granted_scopes" => "true"  # incremental auth
}
)

最新更新