我有一个服务帐户,我将 OAuth2 gem 与Google API Ruby Client一起使用:
require 'oauth2'
require 'google/api_client'
我的目标是获取一个访问令牌,它允许访问特定用户的帐户而不是其他帐户。我认为这通常是sub
在使用 HTTP 时使用参数来实现的,但是如何使用上面的 Ruby 客户端库来实现呢?
我可以成功获取访问令牌并使用它来访问驱动器 v2 文件列表 API。我总是在响应中看到一个“如何开始使用云端硬盘”文档,而没有其他文档。
我怀疑我冒充用户的尝试没有成功。基本上,我将电子邮件地址作为sub
以下函数的选项传递:
client = Google::APIClient.new(...)
access_token = OAuth2::AccessToken.new(oauth2_client, client.authorization.access_token, {‘sub’ => ‘user@domain.com’} )
大概这不是这样做的方法。
如何检索一个访问令牌,其范围允许访问模拟单个用户而不是其他用户?
根据史蒂夫的评论,我已经放弃了 intridea 宝石,现在正在使用 Signet。我走得更远了,但是当我指定一个:person 时,我遇到了 access_denied 错误。没有它,我可以进行身份验证,但显然我可以作为发行人获得访问权限。
require 'google/api_client'
...
client = Google::APIClient.new(:application_name => application_name, :application_version => application_version)
...
opts = {
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => scope,
:issuer => service_account_email_address,
:signing_key => key,
:person => 'my.email@address.com'
})
client.authorization = Signet::OAuth2::Client.new(opts)
access_token = client.authorization.fetch_access_token!
...
>> client.authorization.fetch_access_token!
Signet::AuthorizationError: Authorization failed. Server message:
{
"error" : "access_denied",
"error_description" : "Requested client not authorized."
}
我有一个控制台项目,我对它进行了“测试安装流程”,但客户端似乎不受信任。我在哪里看?
谢谢。