# Google Apps

## Présentation

Les applications Google peuvent utiliser SAML pour authentifier les utilisateurs, en se comportant comme des fournisseurs de service SAML, tel qu'expliqué ici.

Pour fonctionner avec LL::NG il faut :

- Un compte applicatif Google entreprise
- LL::NG configuré comme fournisseur d'identité SAML
- Enregistrer les utilisateurs dans Google Apps avec la même adresse mail que celle utilisée dans LL::NG (l'adresse mail sera le NameID échangé entre Google Apps et LL::NG)

## Configuration

### Panneua de contrôle Google Apps

Cette section est basée sur la documentation SimpleSAMLPHP.

Comme administrateur, aller dans le panneau de contrôle Google Apps et cliquer sur les outils avancés click (Advanced tools) :

Ensuite sélectionner `Set up single sign-on (SSO)`:

Puis configurer tous les paramètres SAML :

- Enable Single Sign-On: sélectionner. Le désélectionner désactive l'authentification SAML (à utiliser, si votre fournisseur d'identité est hors service).
- Sign-in page URL: point d'accès SSO (HTTP-Redirect binding). Exemple : http://auth.example.com/saml/singleSignOn
- Sign-out page URL: il ne s'agit pas du point d'accès de déconnexion globale (SLO) (Google Apps ne le supporte pas), mais de la page de déconnexion. Exemple: http://auth.example.com/?logout=1
- Change password URL: où les utilisateurs peuvent changer leur mot-de-passe. Exemple: http://auth.example.com

### Certificat

Pour le certificate, vous pouvez le construire en signant la clef privée enregistrée dans le Manager. Selectionner la clef, et l'exporter (bouton `Télécharger`): Ceci télécharge les clefs publique et privée.

Garder la clef privée dans un fichier, par exemple lemonldap-ng-priv.key, et utiliser openssl pour générer un certificat auto-signé :

    openssl req -new -key lemonldap-ng-priv.key -out cert.csr
    openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem

Télécharger ensuite le certificat (`cert.pem`) dans Google Apps.

On peut aussi utiliser le certificat au lieu de la clef publique dans les métadatas SAML, voir configuration du service SAML

### Nouveau fournisseur de service

Il est nécessaire d'avoir configuré LL::NG comme fournisseur d'identité SAML,

Ajouter ensuite Google Apps comme nouveau fournisseur de service SAML :

1. Dans le manager, cliquer sur fournisseurs de service SAML puis sur le bouton `Nouveau fournisseur de service`.
2. Mettre GoogleApps comme nom de fournisseur de service.
3. Mettre `Email` dans `Options` » `Réponse d'authentification` » `Format NameID par défaut`
4. Désactiver toutes les cases dans `Options` » `Signature`, excepté `Signer les messages SSO` qui doit être activée
5. Selectionner `Metadata`, et déprotéger le champ pour y mettre :

    <md:EntityDescriptor entityID="google.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
      <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.google.com/a/mydomain.org/acs" index="1" />
        <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
      </SPSSODescriptor>
    </md:EntityDescriptor>

Changer mydomain.org (dans `AssertionConsumerService` markup, parameter `Location`) en votre domaine Google Apps. Adapter également l' "entityID" pour qu'elle corresponde à l'émetteur de l'assertion : google.com/a/mydomain.org

### Menu application

Il est possible d'ajouter un lien dans le menu application pour afficher Google Apps.

Certains paramètres doivent être adaptés :

- Address : indiquer une des URL de Google Apps (chaque application Google Apps produit une URL distincte), par exemple http://www.google.com/calendar/hosted/mydomain.org/render
- Display : comme Google Apps n'est pas une application protégée, indiquer `On` pour toujours l'afficher

Mettre mydomain.org dans le domaine Google Apps

### Déconnexion

Google Apps ne supporte pas le Single Logout (SLO).

Google Apps ne dispose pas de paramètre de configuration pour rediriger les utilisateurs vers une URL spécifique après la déconnexion Google Apps (voir Google Apps control panel).

Pour gérer l'autre voie (LL::NG → Google Apps), ajouter une règle de redirection après déconnexion:

    GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout

Mettre mydomain.org dans le domaine Google Apps