> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentification par compte de service - Google Sheets API for Laravel

> Configurer l'authentification par compte de service pour l'API Google Sheets. Idéal pour la communication de serveur à serveur.

L'authentification par compte de service est idéale pour accéder à Google Sheets de serveur à serveur. Aucune interaction utilisateur n'est requise ; l'application elle-même manipule les feuilles de calcul. Elle convient aux tâches automatisées et aux jobs en arrière-plan.

## Cas d'usage

* **Accès de serveur à serveur** — l'application accède à Sheets sans intervention de l'utilisateur
* **Systèmes automatisés** — jobs en arrière-plan, tâches cron, rapports automatiques
* **Feuilles de calcul fixes** — contrôle de feuilles de calcul spécifiques
* **Environnement de production** — fonctionne de manière fiable sans flux de consentement utilisateur

## Prérequis

* Un projet Google Cloud Console
* Google Sheets API et Google Drive API activés
* Droits d'administration sur le projet

## Configuration

<Steps>
  <Step title="Créer un projet Google Cloud">
    1. Accédez à la [Google Cloud Console](https://console.cloud.google.com/)
    2. Créez un nouveau projet ou sélectionnez-en un existant
    3. Notez l'ID du projet
  </Step>

  <Step title="Activer les API requises">
    1. Rendez-vous dans **APIs & Services** > **Library**
    2. Recherchez et activez les API suivantes :
       * **Google Sheets API**
       * **Google Drive API**
  </Step>

  <Step title="Créer un compte de service">
    1. Rendez-vous dans **APIs & Services** > **Credentials**
    2. Cliquez sur **Create Credentials** > **Service Account**
    3. Saisissez les détails du compte de service :
       * **Service account name** : un nom descriptif (par exemple « Laravel Sheets App »)
       * **Service account ID** : généré automatiquement
       * **Description** : facultatif
    4. Cliquez sur **Create and Continue**
    5. Ignorez les deux sections optionnelles et cliquez sur **Done**
  </Step>

  <Step title="Générer une clé de compte de service">
    1. Sur la page **Credentials**, cliquez sur le compte de service créé
    2. Rendez-vous dans l'onglet **Keys**
    3. Cliquez sur **Add Key** > **Create new key**
    4. Sélectionnez le format **JSON**
    5. Cliquez sur **Create**
    6. Le fichier JSON est téléchargé automatiquement
  </Step>

  <Step title="Enregistrer le fichier JSON">
    1. Déplacez le fichier JSON téléchargé vers `storage/app/`
    2. Renommez-le en `google-service-account.json`
    3. **Important** : ajoutez-le au `.gitignore` pour l'exclure du contrôle de version

    ```bash theme={null}
    # À ajouter au .gitignore
    storage/app/google-service-account.json
    ```
  </Step>

  <Step title="Configurer le fichier .env">
    Ajoutez ce qui suit au fichier `.env` :

    ```env theme={null}
    GOOGLE_SERVICE_ENABLED=true
    GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION=storage/app/google-service-account.json
    ```
  </Step>

  <Step title="Configurer les scopes dans config/google.php">
    ```php theme={null}
    'scopes' => [
        \Google\Service\Sheets::SPREADSHEETS,
        \Google\Service\Drive::DRIVE,
    ],
    ```
  </Step>

  <Step title="Partager les feuilles de calcul">
    Pour chaque feuille de calcul Google Sheets :

    1. Ouvrez-la dans Google Sheets
    2. Cliquez sur le bouton **Partager**
    3. Copiez le champ `client_email` du fichier JSON
    4. Partagez avec cette adresse e-mail (par exemple : `your-service-account@your-project-id.iam.gserviceaccount.com`)
    5. Sélectionnez les autorisations :
       * **Lecteur** — lecture seule
       * **Éditeur** — lecture et écriture
       * **Propriétaire** — accès complet (déconseillé)
  </Step>
</Steps>

## Utilisation

Une fois la configuration terminée, le compte de service est utilisé automatiquement. Aucune configuration de jeton d'accès n'est requise.

```php theme={null}
use Revolution\Google\Sheets\Facades\Sheets;

// Le compte de service est utilisé automatiquement
$values = Sheets::spreadsheet('your-spreadsheet-id')
    ->sheet('Sheet1')
    ->all();

// Référencer par nom de feuille de calcul (nécessite l'accès à Drive API)
$values = Sheets::spreadsheetByTitle('My Spreadsheet')
    ->sheet('Sheet1')
    ->all();
```

## Bonnes pratiques de sécurité

### 1. Limiter les autorisations du compte de service

* Partagez uniquement les feuilles de calcul nécessaires
* Utilisez **Éditeur** plutôt que **Propriétaire**
* Auditez régulièrement les autorisations d'accès

### 2. Stockage sécurisé de la clé

* N'incluez pas la clé du compte de service dans le contrôle de version
* Excluez-la impérativement via `.gitignore`
* En production, stockez-la dans un emplacement sécurisé hors du web root
* Effectuez une rotation régulière des clés

### 3. Déploiement en production

Mesures de sécurité supplémentaires :

* Stockez la clé JSON dans un emplacement sécurisé hors du web root
* Utilisez des comptes de service distincts par environnement (développement, staging, production)
* Surveillez l'utilisation de ces comptes dans la Google Cloud Console
* Journalisez et alertez sur les activités suspectes

## Référence des variables d'environnement

| Variable                               | Description                                     | Exemple                                   |
| -------------------------------------- | ----------------------------------------------- | ----------------------------------------- |
| `GOOGLE_SERVICE_ENABLED`               | Active l'authentification par compte de service | `true`                                    |
| `GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION` | Chemin vers le fichier JSON                     | `storage/app/google-service-account.json` |

## Configuration avancée

### Stocker la chaîne JSON dans une variable d'environnement

Au lieu de stocker le fichier JSON comme fichier séparé, vous pouvez stocker la chaîne JSON dans une variable d'environnement. Cela convient aux environnements CI/CD comme GitHub Actions.

**Étape 1 : ajouter la chaîne JSON au `.env`**

```env theme={null}
GOOGLE_SERVICE_ENABLED=true
GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION='{"type": "service_account", "project_id": "your-project-id", ...}'
```

**Étape 2 : décoder la chaîne JSON dans `config/google.php`**

```php theme={null}
// config/google.php
'service' => [
    'enable' => env('GOOGLE_SERVICE_ENABLED', false),
    'file' => json_decode(env('GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION', ''), true),
],
```

Cette méthode évite d'avoir à stocker un fichier séparé et permet de tout gérer via les variables d'environnement de votre pipeline CI/CD.

## Dépannage

### Erreurs courantes

**Erreur « caller does not have permission »**

* Vérifiez que la feuille de calcul est bien partagée avec l'adresse e-mail du compte de service
* Pour les opérations d'écriture, vérifiez que les autorisations sont au moins **Éditeur**

**Erreur « File not found »**

* Vérifiez que le chemin du fichier JSON est correct
* Vérifiez que le fichier existe et est lisible par le serveur web

**Erreur « API not enabled »**

* Vérifiez que Google Sheets API et Google Drive API sont activés dans la Google Cloud Console
* Attendez quelques minutes après l'activation de l'API

**Erreur « Invalid credentials »**

* Vérifiez que le fichier de clé JSON est valide et non corrompu
* Vérifiez que le compte de service n'a pas été supprimé ou désactivé
* Vérifiez que l'ID du projet correspond bien au projet Google Cloud

### Tester la configuration

Route de test pour vérifier la configuration du compte de service :

```php theme={null}
// routes/web.php
Route::get('/test-sheets', function () {
    try {
        $sheets = Sheets::spreadsheetList();
        return response()->json([
            'status' => 'success',
            'message' => 'L\'authentification par compte de service fonctionne',
            'spreadsheet_count' => count($sheets)
        ]);
    } catch (\Exception $e) {
        return response()->json([
            'status' => 'error',
            'message' => $e->getMessage()
        ]);
    }
});
```

Accédez à cette route de test pour vérifier que l'authentification par compte de service est correctement configurée.


## Related topics

- [Authentification OAuth 2.0 - Google Sheets API for Laravel](/fr/packages/laravel-google-sheets/oauth.md)
- [Google Sheets API for Laravel](/fr/packages/laravel-google-sheets/index.md)
- [Kits de démarrage](/fr/starter-kits.md)
- [Comparaison des méthodes d'authentification - Laravel Bluesky](/fr/packages/laravel-bluesky/authentication.md)
- [Feed Generator](/fr/packages/laravel-bluesky/feed-generator.md)
