我正试图为自己创建一个应用程序,只是直接连接到我的日历…但我不想再参与重新认证我只想编码一次身份验证并完成它。
验证码如下:
key = Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH, PASSWORD)
asserter = Google::APIClient::JWTAsserter.new(
SERVICE_ACCOUNT_EMAIL,
'https://www.googleapis.com/auth/calendar',
key)
@client = Google::APIClient.new
@client.authorization = asserter.authorize#(SERVICE_ACCOUNT_EMAIL)
@client
我的SERVICE_ACCOUNT_...PKCS .
文件和我的Sinatra应用程序一起在目录的根目录下。
我已经在我的gmail帐户上启用了Google Calendar API。
我一直在研究这里的认证方法:https://code.google.com/p/google-api-ruby-client/(经过授权,讨论服务器到服务器的通信)
$ ruby server.rb
Faraday: you may want to install system_timer for reliable timeouts
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:16: warning: already initialized constant KeyMap
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:177: warning: already initialized constant DEFAULT_SEP
W, [2013-01-15T09:52:11.371122 #28607] WARN -- : Google::APIClient - Please provide :application_name and :application_version when initializing the client
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:869:in `fetch_access_token': Authorization failed. Server message: (Signet::AuthorizationError)
{
"error" : "invalid_grant"
}
from /home/me/.rvm/gems/ruby-1.8.7-p371/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:882:in `fetch_access_token!'
from /home/me/.rvm/gems/ruby-1.8.7-p371/gems/google-api-client-0.6.1/lib/google/api_client/auth/jwt_asserter.rb:116:in `authorize'
from server.rb:32:in `build_client'
from server.rb:38
有什么问题吗?为什么会出现这个错误?-特别是因为我几乎复制了代码从谷歌宝石的网站。
更新:发现:
invalid_grant尝试从google获取oAuth令牌
说我应该这样做:"请确保在请求中指定access_type=offline。"
我怎么做这个与红宝石宝石?不完全重做HTTP请求?
这是一个工作代码,除了最后一行,它应该有实际拥有日历的用户(您)的电子邮件。我想服务账户的邮箱不是你的邮箱。
client_asserter = Google::APIClient::JWTAsserter.new(
config['client_email'],
PLUS_LOGIN_SCOPE,
key
)
$client.authorization = client_asserter.authorize(config['user_email'])
还要确保正确创建服务帐户。我使用了这个指南:https://developers.google.com/+/domains/authentication/delegation,这是针对Domain API的,但第一部分应该是相同的。
另外,您不需要另一个用于身份验证的作用域吗?
这里是一个完整的例子(ruby),我得到了工作为我:https://github.com/admitriyev/propellant/blob/master/main.rb