para - ruby on rails
subvención no válida al intentar autorizar a un servidor a la aplicación de tipo servidor en ruby para acceder a Google Calendar (1)
Aquí hay un código de trabajo, que es similar, excepto la última línea, que debe tener el correo electrónico del usuario que realmente posee el calendario (usted). Supongo que el correo electrónico de la cuenta de servicio no es su correo electrónico.
client_asserter = Google::APIClient::JWTAsserter.new(
config[''client_email''],
PLUS_LOGIN_SCOPE,
key
)
$client.authorization = client_asserter.authorize(config[''user_email''])
Además, asegúrese de organizar la cuenta de servicio correctamente. Utilicé esta guía: https://developers.google.com/+/domains/authentication/delegation , que es para Domain API, pero la primera parte debe ser la misma.
Además, ¿no necesita otro alcance para la autenticación?
Aquí hay un ejemplo completo (ruby) que tengo que trabajar para mí: https://github.com/admitriyev/propellant/blob/master/main.rb
Intento crear una aplicación para mí que se conecte directamente a mi calendario ... pero no quiero volver a autenticarme. Solo quiero codificar la autenticación una vez y terminar con ella.
El código de autenticación es el siguiente:
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
Mi SERVICE_ACCOUNT_...PKCS .
archivo está en la raíz del directorio junto con mi aplicación Sinatra.
He habilitado la API de Google Calendar en mi cuenta de gmail.
He estado buscando un método de autenticación aquí: https://code.google.com/p/google-api-ruby-client/ (bajo autorización, donde se habla de comunicación de servidor a servidor)
$ 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
¿Cuál podría ser el problema? ¿Por qué recibo este error? - Especialmente porque he copiado bastante el código del sitio de Google Gema.
ACTUALIZAR:
encontró esto:
invalid_grant tratando de obtener el token oAuth de google
dice que debería hacer esto: "Asegúrese de especificar access_type = offline en su solicitud".
¿Cómo hago esto con la gema Ruby? sin volver a hacer completamente las solicitudes http?