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
1
Crea un progetto Google Cloud
- Vai su Google Cloud Console
- Crea un nuovo progetto o seleziona uno esistente
- Annota l’ID del progetto
2
Abilita le API necessarie
- Vai su APIs & Services > Library
- Cerca e abilita le seguenti API:
- Google Sheets API
- Google Drive API
3
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
4
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
5
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
6
Configura il file .env
Aggiungi quanto segue a
.env:7
Imposta gli scope in config/google.php
8
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.
your-service-account@your-project-id.iam.gserviceaccount.com) - 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
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