Casi d’uso
- Accesso server-to-server — l’app accede a Sheets senza interazione dell’utente
- Sistemi automatizzati — job in background, task cron, report automatici
- Fogli di calcolo fissi — controllo di fogli di calcolo specifici
- Ambienti di produzione — funziona in modo affidabile senza flussi di consenso dell’utente
Prerequisiti
- Un progetto Google Cloud Console
- Google Sheets API e Google Drive API abilitate
- Permessi di amministratore del progetto
Configurazione
Crea un progetto Google Cloud
- Vai su Google Cloud Console
- Crea un nuovo progetto o seleziona uno esistente
- Annota l’ID del progetto
Abilita le API necessarie
- Vai su APIs & Services > Library
- Cerca e abilita le seguenti API:
- Google Sheets API
- Google Drive API
Crea un Service Account
- Vai su APIs & Services > Credentials
- Fai clic su Create Credentials > Service Account
- Inserisci i dettagli del Service Account:
- Service account name: un nome descrittivo (es. “Laravel Sheets App”)
- Service account ID: generato automaticamente
- Description: opzionale
- Fai clic su Create and Continue
- Salta entrambe le sezioni opzionali e fai clic su Done
Genera una chiave del Service Account
- Nella pagina Credentials, fai clic sul Service Account creato
- Vai alla scheda Keys
- Fai clic su Add Key > Create new key
- Seleziona JSON come formato della chiave
- Fai clic su Create
- Il file JSON viene scaricato automaticamente
Salva il file JSON
- Sposta il file JSON scaricato in
storage/app/ - Rinominalo in
google-service-account.json - Importante: aggiungilo a
.gitignoreper escluderlo dal controllo di versione
Condividi il foglio di calcolo
Per ogni foglio di calcolo di Google Sheets:
- Aprilo in Google Sheets
- Fai clic sul pulsante Condividi
- Copia il campo
client_emaildal file JSON - Condividi con questo indirizzo email (es.
[email protected]) - Seleziona i permessi:
- Visualizzatore — sola lettura
- Editor — lettura e scrittura
- Proprietario — accesso completo (sconsigliato)
Utilizzo
Una volta completata la configurazione, il Service Account viene utilizzato automaticamente. Non è necessario impostare un access token.Best practice di sicurezza
1. Limita i permessi del Service Account
- Condividi solo i fogli di calcolo necessari
- Usa Editor invece di Proprietario
- Verifica periodicamente i permessi di accesso
2. Conservazione sicura della chiave
- Non includere la chiave del Service Account nel controllo di versione
- Escludila con certezza tramite
.gitignore - In produzione, conservala in una posizione sicura al di fuori della web root
- Ruota periodicamente le chiavi
3. Distribuzione in produzione
Misure di sicurezza aggiuntive:- Conserva la chiave JSON in una posizione sicura al di fuori della web root
- Usa Service Account diversi per ciascun ambiente (sviluppo, staging, produzione)
- Monitora l’utilizzo di questi account in Google Cloud Console
- Registra e segnala attività sospette
Riferimento delle variabili d’ambiente
| Variabile | Descrizione | Esempio |
|---|---|---|
GOOGLE_SERVICE_ENABLED | Abilita l’autenticazione Service Account | true |
GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION | Percorso del file JSON | storage/app/google-service-account.json |
Configurazione avanzata
Salvare la stringa JSON in una variabile d’ambiente
Invece di conservare il file JSON come file separato, puoi salvarne il contenuto come variabile d’ambiente. Adatto ad ambienti CI/CD come GitHub Actions. Step 1: aggiungi la stringa JSON a.env
config/google.php
Risoluzione dei problemi
Errori comuni
Errore «caller does not have permission»- Verifica che il foglio di calcolo sia condiviso con l’indirizzo email del Service Account
- Per le operazioni di scrittura, verifica che i permessi siano almeno Editor
- Verifica che il percorso del file JSON sia corretto
- Verifica che il file esista e sia leggibile dal server web
- Verifica che Google Sheets API e Google Drive API siano abilitate in Google Cloud Console
- Attendi qualche minuto dopo l’abilitazione dell’API
- Verifica che il file della chiave JSON sia valido e non danneggiato
- Verifica che il Service Account non sia stato eliminato o disabilitato
- Verifica che l’ID del progetto corrisponda al progetto Google Cloud