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

# Configurer l'authentification LDAP

> L'authentification LDAP permet aux utilisateurs de se connecter à Paradigm avec leurs identifiants d'annuaire d'entreprise, sans nécessiter de mot de passe Paradigm séparé.

L'authentification LDAP (Lightweight Directory Access Protocol) permet aux utilisateurs de se connecter à Paradigm avec leurs identifiants d'annuaire d'entreprise. Contrairement à SAML et OIDC, Paradigm se connecte directement à votre serveur LDAP pour vérifier les identifiants.

## Étape 1 : Activer LDAP au niveau de l'instance

Allez dans **Administration Paradigm > Paramètres > Valeurs des clés de configuration** et définissez :

* **`IS_LDAP_ON`** : `True`

<Warning>
  L'application doit être redémarrée après l'activation de LDAP. L'authentification ne fonctionnera pas avant la fin du redémarrage.
</Warning>

## Étape 2 : Configurer LDAP pour une entreprise

Allez dans **Administration Paradigm > Authentification > Applications Sociales** et cliquez sur **Ajouter**.

### Informations de base

* **Fournisseur** : `ldap`
* **Nom** : Un nom descriptif pour l'admin (ex : `Acme Corp LDAP`)
* **Entreprise** : Sélectionnez l'entreprise à laquelle s'applique cette configuration

### Configuration de l'URL de connexion

Choisissez l'une des options suivantes, ou configurez les deux pour plus de redondance :

**Option A — Domaine personnalisé**

* **Domaine personnalisé** : `login.votreentreprise.com`
* URL de connexion : `https://login.votreentreprise.com/login`
* **Variable d'environnement requise :**

La variable d'environnement `DOMAIN` doit être définie pour la construction des URL d'authentification LDAP :

```bash theme={null}
# En production (à définir dans .env ou la config de déploiement)
DOMAIN=login.votreentreprise.com

# En développement local (valeur par défaut)
DOMAIN=localhost:8000
```

* Nécessite une configuration DNS (voir [Configuration DNS](#configuration-dns) ci-dessous)

**Option B — Identifiant client (fallback)**

* **ID Client** : Un identifiant en minuscules sans espaces (ex : `votreentreprise`)
* URL de connexion : `https://<domaine_paradigm>/login/ldap/votreentreprise`
* Aucune configuration DNS requise

### Paramètres LDAP

Dans le champ **Paramètres**, saisissez un objet JSON avec la configuration de votre serveur LDAP :

```json theme={null}
{
  "server_uri": "ldaps://ldap.entreprise.com:636",
  "bind_dn": "CN=ldap-service,OU=ComptesDeSvc,DC=entreprise,DC=com",
  "bind_password": "votre-mot-de-passe-securise",
  "user_search_base": "OU=Utilisateurs,DC=entreprise,DC=com",
  "user_search_filter": "(mail=%(user)s)",
  "attr_email": "mail",
  "attr_first_name": "givenName",
  "attr_last_name": "sn",
  "use_tls": true,
  "connection_timeout": 5
}
```

| Champ                | Description                                                                                                  |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| `server_uri`         | URL du serveur LDAP. Utilisez `ldaps://` (port 636) pour les connexions chiffrées.                           |
| `bind_dn`            | Nom distinctif (DN) du compte de service utilisé pour interroger l'annuaire.                                 |
| `bind_password`      | Mot de passe du compte de service.                                                                           |
| `user_search_base`   | DN de base où se trouvent les comptes utilisateurs.                                                          |
| `user_search_filter` | Filtre pour trouver les utilisateurs. `%(user)s` est remplacé par le nom d'utilisateur saisi à la connexion. |
| `attr_email`         | Attribut LDAP contenant l'adresse e-mail de l'utilisateur.                                                   |
| `attr_first_name`    | Attribut LDAP pour le prénom de l'utilisateur.                                                               |
| `attr_last_name`     | Attribut LDAP pour le nom de famille de l'utilisateur.                                                       |
| `use_tls`            | Indique si TLS doit être utilisé. Recommandé : `true`.                                                       |
| `connection_timeout` | Délai de connexion en secondes.                                                                              |

## Étape 3 : Mettre à jour la méthode de connexion de l'entreprise

**Administration Django → Authentification → Entreprises → Sélectionner l'entreprise**

* Définissez la **Méthode de connexion** sur :
  * `LDAP` (LDAP uniquement)

## Étape 4 : Vérifier la configuration CNAME (pour les domaines personnalisés)

Après avoir configuré le DNS :

1. **Attendez 5 à 30 minutes** pour la propagation DNS
2. **Dans l'administration Django** → Applications Sociales → Ouvrez l'Application Sociale
3. **Consultez les diagnostics détaillés** :
   * Faites défiler jusqu'à la section "Résultats du test CNAME"
   * Consultez les vérifications DNS, HTTP et middleware détaillées
4. **Test en masse** : Sélectionnez plusieurs applications → Actions → "Tester la configuration CNAME"

## Configuration DNS

Si vous avez choisi l'option domaine personnalisé, votre client doit créer un enregistrement DNS CNAME pointant son sous-domaine de connexion vers le domaine applicatif Paradigm :

```
login.votreentreprise.com  →  CNAME  →  app.<domaine_paradigm>
```

La propagation DNS peut prendre jusqu'à 48 heures. Les utilisateurs ne pourront pas se connecter via le domaine personnalisé tant que la propagation n'est pas terminée.

## Recommandations de sécurité

* Utilisez un **compte de service dédié en lecture seule** pour les requêtes LDAP. N'utilisez pas un compte administrateur.
* Utilisez toujours **LDAPS** (`ldaps://`, port 636) plutôt que LDAP non chiffré (port 389) pour protéger les identifiants en transit.
* Assurez-vous que **TLS/SSL** est activé (`"use_tls": true`).

## Tester la configuration LDAP

### 1. Tester la détection de l'entreprise

```bash theme={null}
# Test avec domaine personnalisé
curl -H "Host: login.votreentreprise.com" https://app.paradigm.com/api/v3/auth/check-company

# Test avec le fallback client_id (depuis le chemin URL)
curl https://app.paradigm.com/api/v3/auth/check-company
```

**Réponse attendue** :

```json theme={null}
{
  "company": {
    "id": 123,
    "name": "Votre Entreprise"
  },
  "auth_method": "ldap",
  "custom_domain": "login.votreentreprise.com",
  "slug": "votreentreprise"
}
```

### 2. Tester la connexion LDAP

Utilisez la commande `ldapsearch` pour vérifier la connectivité :

```bash theme={null}
ldapsearch -H ldaps://ldap.entreprise.com:636 \
  -D "CN=service,DC=entreprise,DC=com" \
  -w "motdepasse" \
  -b "OU=utilisateurs,DC=entreprise,DC=com" \
  "(mail=utilisateur@entreprise.com)"
```

**Vérifiez** :

* La connexion réussit
* L'utilisateur est trouvé
* Les attributs (mail, givenName, sn) sont retournés

### 3. Tester le flux de connexion

1. Accédez à l'URL de connexion (domaine personnalisé ou slug)
2. Saisissez le nom d'utilisateur/e-mail LDAP
3. Saisissez le mot de passe LDAP
4. Vérifiez que :
   * L'utilisateur est authentifié
   * L'utilisateur est auto-provisionné (s'il est nouveau)
   * L'utilisateur arrive sur l'interface de chat ou l'acceptation de politique

### 4. Vérifier les journaux d'audit

**Administration Django → Journal d'audit**

* Filtrez par utilisateur
* Recherchez :
  * "Utilisateur connecté" avec method="ldap"
  * "Utilisateur créé" avec method="ldap\_auto\_provision" (pour les nouveaux utilisateurs)
