2012-04-21 15 views
9

Da quando ho attivato l'autenticazione a 2 fattori (ovvero la verifica in due passaggi) su Google, il mio Google export scripts non funziona più. Il computer è verificato e affidabile, ma in qualche modo gli script non lo sono. In effetti, ogni volta che viene eseguito il cron job ricevo un nuovo "codice di verifica Google" e lo script fallisce. Presumo che dovrebbe essere una semplice questione autenticare tali script una volta per tutte con wget o curl, ma non sono riuscito a trovare alcuna documentazione su come farlo.Come utilizzare la password specifica dell'applicazione Google nello script?


schemi di autenticazione di Google sono passati attraverso molte iterazioni, e non posso più sembrano accedere utilizzando curl o mechanicalsoup. Ho provato a utilizzare URL come https://accounts.google.com/ServiceLogin?continue=https://calendar.google.com/calendar/exporticalzip&[email protected]&Passwd=application-specific-password e mi viene sempre reindirizzato a una pagina di accesso, in genere con il messaggio "Utilizzare la password dell'account anziché una password specifica per l'applicazione".

+2

Si dovrebbe provare a utilizzare OAuth2 piuttosto che questo vecchio metodo deprecato, quindi c'è meno problemi con i token di verifica. – Tim

+0

@Tim: Esiste una guida su come utilizzarlo con lo script di shell? – l0b0

+0

Le specifiche su http://tools.ietf.org/html/draft-ietf-oauth-v2-25 mostrano come farlo. Penso che 'curl' potrebbe essere in grado di fare il materiale https e lasciarti passare le richieste con' --raw'? O forse il ricciolo ha opzioni per adattarsi a questo genere di cose? – ams

risposta

0
+0

Non riesco a capire come farlo da uno script di shell. Un * lotto * di googling non ha scoperto un singolo script di shell che sembra essere in grado di eseguire la verifica in due passaggi. – l0b0

+0

Controllare i collegamenti: si tratta di una verifica in un'unica fase che utilizza una password generata a caso, progettata specificamente per le applicazioni che non sono compatibili con la verifica in due passaggi. – Tgr

+0

"Se sei uno sviluppatore dell'API di Google Apps e utilizzi l'autenticazione ClientLogin" - Io non, per quanto ne so - Lo [script di autenticazione] (https://github.com/l0b0/export/blob/master/GoogleAuth .sh) utilizza 'ServiceLoginAuth', e la semplice sostituzione della password con la password specifica dell'applicazione non funziona. – l0b0

0

Fare password specifiche dell'applicazione funziona per i miei script, tutto ciò che devi fare è creare la password e poi nel tuo script in cui hai la password del tuo account google inserisci invece la password specifica dell'applicazione.

Vedi qui per maggiori su richiesta di password specifiche:

Application Specific Passwords

Spero che questo aiuti !!

+0

Provato già, e non ha accettato la richiesta. Hai un esempio di codice effettivo? – l0b0

4

Sei assolutamente sicuro di voler utilizzare l'autenticazione a 2 fattori con gli script della shell? Se è così, non è necessario cercare di ottenere il tuo computer o script come "fidato". Basta eseguire l'autenticazione a 2 fattori ogni volta che si esegue lo script.

Se l'obiettivo è saltare l'autenticazione manuale del secondo fattore, suggerirei invece di utilizzare una password specifica dell'applicazione (come già suggerito da altre risposte). Fai finta di non utilizzare l'autenticazione a 2 fattori su tutto e utilizzare il tuo nome di accesso reale, ma imposta la password a una generata a https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en (sottopagina di https://www.google.com/settings/security).

L'intento è quello di impostare la password specifica dell'applicazione "Nome" su un valore che è significativo per voi. Ad esempio, ho delle password con l'etichetta "Pidgin at work", "My Android Phone", "Thunderbird Google Address Book Extension at Work" ecc. Si può avere una per "Calendar and Reader Export Script". Se credi che questa password specifica per l'Applicazione sia compromessa ("trapelata"), basta cliccare sul link "Revoca" nella stessa pagina e quindi generare una nuova password per il tuo script.

Per il codice, utilizzare solo l'ultima versione che ha funzionato con Google fattore singolo auth. Aggiornamento: poiché la domanda originale utilizzava l'URL https://accounts.google.com/ServiceLogin per avviare l'accesso alla sessione è praticamente falso l'accesso al browser. Tuttavia, Google non supporta ufficialmente questo aspetto e, mentre sto scrivendo questo, sembra che l'utilizzo di una password specifica per l'applicazione per l'accesso normale finirà con il messaggio di errore "Utilizzare la password dell'account anziché una password specifica per l'applicazione".

Una cosa da capire sull'autenticazione a 2 fattori di Google e sul "computer fidato" è che l'implementazione effettiva aggiunge semplicemente un cookie permanente con 30 giorni di scadenza al browser. Il computer fidato non significa che il tuo indirizzo IP sia affidabile o che siano state create altre connessioni magiche. A meno che i tuoi script non catturino il cookie "trusted computer" dal tuo browser preferito, non importa se hai mai contrassegnato il tuo computer come affidabile.(Il modulo di Google non dovrebbe dire "Ricorda questo computer per 30 giorni" ma "Fidati di questo browser e combinazione di account utente per 30 giorni (salva cookie permanente)". Tuttavia, immagino che sia stato considerato troppo tecnico ...)

Aggiornamento: (copiato dal mio commento in basso) L'unico metodo ufficialmente supportato (applicazioni Server to Server) è documentato allo https://developers.google.com/accounts/docs/OAuth2ServiceAccount. Richiede la codifica OAuth/JWT della richiesta e l'utilizzo della chiave privata dell'account di servizio creata a https://code.google.com/apis/console. In alternativa è possibile utilizzare l'autenticazione ClientLogin (già deprecato, miglior sforzo fino al 2015).

Se si decide di andare con OAuth, si potrebbe desiderare di guardare http://blog.yjl.im/2010/05/bash-oauth.html e https://github.com/oxys-net/curl-oauth

+0

Il messaggio di errore è "Utilizzare la password dell'account anziché una password specifica dell'applicazione". Sembra che Google stia attivamente uccidendo qualsiasi supporto per l'utilizzo di una semplice password di accesso una volta attivato il login a 2 fattori. L'unico metodo ufficialmente supportato (applicazioni Server to Server) è documentato su https://developers.google.com/accounts/docs/OAuth2ServiceAccount. Richiede la codifica OAuth/JWT della richiesta e l'utilizzo della chiave privata dell'account di servizio creata all'indirizzo https://code.google.com/apis/console/. In alternativa è possibile utilizzare l'autenticazione ClientLogin (servizio best effort fino al 2015). –

+1

Se decidi di utilizzare OAuth, potresti dare un'occhiata a http://blog.yjl.im/2010/05/bash-oauth.html e https://github.com/oxys-net/curl-oauth –

+0

Questo sembra non funzionare più, quindi sto cercando un'altra soluzione ... – l0b0

Problemi correlati