2013-01-06 10 views
6

Mi piacerebbe utilizzare Google Drive per funzionare come quasi CMS per un sito Web che sto facendo in modo che i proprietari dei contenuti possano modificare i loro contenuti utilizzando Google Drive. Mi piacerebbe utilizzare un account utente specifico che ha accesso a Google Drive (al momento di scrivere questo post, gli account di servizio NON hanno accesso diretto a Google Drive) ed è in grado di condividere documenti con i proprietari dei contenuti.Come autorizzo un account del servizio Drive di Google ad accedere a un account google senza utilizzare Google Apps?

Dopo la lettura attraverso l'API e tutorial, ho trovato la risposta nella delegazione: https://developers.google.com/drive/delegation

Il mio problema principale con questo processo è che il sito non è gestito da Google Apps e quindi la procedura descritta in 'dominio delegato "Autorizzazione estesa al tuo account di servizio" mi confondono: sembra che sia possibile gestire questa delega senza utilizzare Google Apps, ma dopo aver cercato le impostazioni in Google Drive per il mio account utente specifico, non riesco a trovare la capacità di autorizzare la rappresentazione.

un frammento di codice che sto utilizzando:

static public function getService() { 
    $key = file_get_contents(GOOGLEAPI_KEYFILE); 
    $auth = new Google_AssertionCredentials(GOOGLEAPI_SERVICE_EMAIL, array(GOOGLEAPI_SCOPE), $key); 
    $auth->setPrn(GOOGLEAPI_IMPERSONATION); 
    self::$apiClient = new Google_Client(); 
    self::$apiClient->setUseObjects(true); 
    self::$apiClient->setAssertionCredentials($auth); 
    return new Google_DriveService(self::$apiClient); 
} 

GOOGLEAPI_IMPERSONATION è l'account utente specifico e quando faccio funzionare questo codice, gli stati di eccezione:

errore rinfrescanti il ​​token OAuth2, messaggio: '{"errore": "access_denied"}

Chiunque può offrire assistenza? Sto fraintendendo un concetto fondamentale di come oAuth funziona in termini di delega?

risposta

5

account di servizio sono pensati per due casi diversi:

  • Autorizzare un app/processo per autenticare & invocare servizi utilizzando la propria identità. Pensa a servizi come previsione, cloud storage, ecc. In cui i dati sono di proprietà dell'app.
  • Impersonare utenti in un dominio di app di Google in cui l'amministratore di dominio può pre-autorizzare l'applicazione ad agire per conto degli utenti nel proprio dominio.

La rappresentazione funziona per i domini di Google Apps perché gli amministratori dispongono di un meccanismo per autorizzare l'app fuori banda per i propri utenti tramite il pannello di controllo. Ovviamente possono solo autorizzare l'app ad accedere ai dati per gli account gestiti. Per i singoli utenti che non fanno parte di un'organizzazione, le app devono utilizzare i normali flussi OAuth per richiedere l'autorizzazione di ciascun utente.

Non l'ho provato da un po ', ma l'ultima volta che ho controllato è possibile utilizzare Drive con un account di servizio che agisce come se stesso. L'unica limitazione a cui mi sono imbattuto era che non era possibile acquistare quote aggiuntive e l'app era limitata allo spazio di archiviazione iniziale da 5 GB.

+1

Steve, grazie per la risposta. Ho usato con successo l'account di servizio per caricare e leggere un documento senza problemi. Tuttavia, non è possibile accedere ai documenti caricati tramite l'interfaccia utente Web di Google Documenti, che è un requisito. Inoltre, il motivo per cui OAuth specifico dell'utente non funziona è perché voglio solo utilizzare l'account del servizio Google Docs come un bucket che contiene i documenti utilizzati per popolare il contenuto sul sito web, quindi se un utente di Google arriva sul sito, c'è non c'è bisogno di loro per il proprio account o altro. –

+4

Correggere che gli account di servizio non abbiano accesso all'interfaccia utente Web. Se questo è un requisito hai alcune opzioni. Per prima cosa è sufficiente condividere i documenti con gli utenti che devono poterli accedere. Tutto ciò che richiede è conoscere il loro indirizzo email.In alternativa, puoi andare nella direzione opposta e creare i documenti in altri account, quindi condividere con l'account di servizio. Infine, se c'è un solo account che ha bisogno di accesso, autorizza l'uso di oauth normale con accesso offline e lascia che l'app agisca per conto di quell'utente. –

+0

Grazie Steve - Vedrò di più quando tornerò a questo progetto –