2013-01-15 12 views
6

Sto provando a creare un'applicazione per me che si collega direttamente al mio calendario ... ma non voglio mai essere coinvolto con -authenticating. Voglio solo codificare l'autenticazione una volta e averlo fatto.concessione non valida quando si tenta di autorizzare un server all'applicazione tipo server in ruby ​​per accedere a Google Calendar

Il codice Auth è la seguente:

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 

Il mio file SERVICE_ACCOUNT_...PKCS . è nella radice della directory insieme con la mia Sinatra app.
Ho abilitato l'API di Google Calendar sul mio account Gmail.

Ho cercato in un metodo di autenticazione qui: https://code.google.com/p/google-api-ruby-client/ (previa autorizzazione, in cui si parla di server a server di comunicazione)

$ 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 

Quale potrebbe essere il problema? Perché ricevo questo errore? - Soprattutto perché ho praticamente copiato il codice dal sito di Google.

UPDATE:

trovato questo:

invalid_grant trying to get oAuth token from google

dice che dovrei fare questo: "Assicurarsi di specificare tipo_accesso = linea nella richiesta."

come faccio questo con la gemma di rubino? senza rifare completamente le richieste http?

+0

Sto avendo un problema simile con una connessione a guidare. Ho appena iniziato questa mattina – tbeseda

+0

hai raggiunto una risoluzione? – nurettin

+0

sfortuna? avendo lo stesso problema – hakunin

risposta

0

Ecco un codice funzionante, che è simile tranne l'ultima riga, che dovrebbe avere l'email dell'utente che possiede effettivamente il calendario (tu). Presumo che l'email dell'account di servizio non sia la tua email.

client_asserter = Google::APIClient::JWTAsserter.new(
    config['client_email'], 
    PLUS_LOGIN_SCOPE, 
    key 
) 
$client.authorization = client_asserter.authorize(config['user_email']) 

Inoltre, assicurarsi di disporre correttamente l'account di servizio. Ho usato questa guida: https://developers.google.com/+/domains/authentication/delegation, che è per l'API di dominio, ma la prima parte dovrebbe essere la stessa.

Inoltre, non è necessario un altro ambito per l'autenticazione?

Ecco un esempio completo (ruby) che ho avuto modo di lavorare per me: https://github.com/admitriyev/propellant/blob/master/main.rb

Problemi correlati