# Nouvelle page

# Connecter Outline à GitLab auto-hébergé (OIDC)

## <a aria-hidden="true" class="anchor" id="bkmrk-"></a>Objectif

Utiliser le **GitLab interne** de l'entreprise comme fournisseur d'identité. Les comptes  
(email + mot de passe) sont gérés dans GitLab, et Outline délègue la connexion à GitLab.  
Aucune dépendance externe — seulement Outline + GitLab.

> Remplace partout `gitlab.improvize.eu` par le vrai domaine de ton GitLab, et  
> `outline.improvize.eu` par celui d'Outline.

**Pré-requis** : HTTPS d'Outline fonctionnel (`https://outline.improvize.eu` affiche la  
page de connexion, sans boucle de redirection).

---

## <a aria-hidden="true" class="anchor" id="bkmrk--2"></a>Étape 1 — Créer l'application OIDC dans GitLab

En tant qu'**administrateur GitLab** (pour que tous les comptes puissent se connecter) :

1. **Admin Area** → **Applications** → **New application**.
2. Renseigne : 
    - **Name** : `Outline`
    - **Redirect URI** (à copier **exactement**, en `https://`, sans slash en trop) : ```plain_text
        https://outline.improvize.eu/auth/oidc.callback
        
        ```
        
        <div class="code-toolbar"><div class="toolbar"><div class="toolbar-item">  
        </div></div></div>
    - **Confidential** : ✅ coché
    - **Trusted** : ✅ coché (recommandé — évite l'écran de consentement à chaque user)
    - **Scopes** : cocher uniquement 
        - ✅ `openid`
        - ✅ `profile`
        - ✅ `email`
3. Clique **Save application**.
4. GitLab affiche alors : 
    - **Application ID** → `OIDC_CLIENT_ID`
    - **Secret** → `OIDC_CLIENT_SECRET` (affiché une seule fois, note-le tout de suite)

---

## <a aria-hidden="true" class="anchor" id="bkmrk--4"></a>Étape 2 — Configurer Outline

Édite le fichier `.env` d'Outline :

```bash
sudo -u outline -i
cd /opt/outline/app
nano .env

```

<div class="code-toolbar" id="bkmrk--5"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>Ajoute (ou complète) le bloc OIDC :

```ini
OIDC_CLIENT_ID=colle_ici_application_id
OIDC_CLIENT_SECRET=colle_ici_le_secret
OIDC_AUTH_URI=https://gitlab.improvize.eu/oauth/authorize
OIDC_TOKEN_URI=https://gitlab.improvize.eu/oauth/token
OIDC_USERINFO_URI=https://gitlab.improvize.eu/oauth/userinfo
OIDC_USERNAME_CLAIM=preferred_username
OIDC_DISPLAY_NAME=GitLab
OIDC_SCOPES=openid profile email

```

<div class="code-toolbar" id="bkmrk--6"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>Vérifie que ces lignes sont correctes et qu'aucun ancien bloc Google ne traîne :

```ini
URL=https://outline.improvize.eu
FORCE_HTTPS=true

```

<div class="code-toolbar" id="bkmrk--7"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>```bash
# Repère d'éventuels restes de config Google à supprimer
grep -n GOOGLE .env

```

<div class="code-toolbar" id="bkmrk--8"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>Sauvegarde, puis sors de la session :

```bash
exit

```

<div class="code-toolbar" id="bkmrk--9"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>---

## <a aria-hidden="true" class="anchor" id="bkmrk--11"></a>Étape 3 — Redémarrer Outline

```bash
sudo systemctl restart outline
sudo journalctl -u outline -f

```

<div class="code-toolbar" id="bkmrk--12"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>Laisse les logs ouverts pour voir les erreurs éventuelles en direct.

---

## <a aria-hidden="true" class="anchor" id="bkmrk--14"></a>Étape 4 — Tester la connexion

1. Ouvre `https://outline.improvize.eu`.
2. Un bouton **« Continue with GitLab »** doit apparaître.
3. Clique → redirection vers GitLab.
4. Connecte-toi avec un compte GitLab (email + mot de passe GitLab).
5. (Si l'application n'est pas « Trusted ») écran de consentement → **Authorize**.
6. Retour automatique sur Outline, connecté. ✅

> Le **premier utilisateur** qui se connecte devient automatiquement **administrateur**  
> de l'espace Outline. Connecte-toi en premier avec ton compte.

---

## <a aria-hidden="true" class="anchor" id="bkmrk--16"></a>Gestion des accès au quotidien

- **Donner accès à Outline** = la personne a besoin d'un compte sur le GitLab interne.
- **Retirer un accès** = désactiver / supprimer le compte côté GitLab.
- Plus aucun mot de passe à gérer dans Outline : tout passe par GitLab.

---

## <a aria-hidden="true" class="anchor" id="bkmrk--18"></a>Dépannage

Pendant la tentative de connexion, surveille `sudo journalctl -u outline -f`.

<table data-sourcepos="121:1-127:147" id="bkmrk-sympt%C3%B4me-cause-proba"><thead><tr data-sourcepos="121:1-121:42"><th data-sourcepos="121:2-121:12">Symptôme</th><th data-sourcepos="121:14-121:29">Cause probable</th><th data-sourcepos="121:31-121:41">Correctif</th></tr></thead><tbody><tr data-sourcepos="123:1-123:180"><td data-sourcepos="123:2-123:40">`redirect_uri_mismatch`côté GitLab</td><td data-sourcepos="123:42-123:89">Redirect URI non identique au caractère près</td><td data-sourcepos="123:91-123:179">Recopier exactement `https://outline.improvize.eu/auth/oidc.callback`dans l'app GitLab</td></tr><tr data-sourcepos="124:1-124:124"><td data-sourcepos="124:2-124:43">Pas de bouton « Continue with GitLab »</td><td data-sourcepos="124:45-124:71">Bloc `OIDC_*`mal chargé</td><td data-sourcepos="124:73-124:123">Vérifier `.env` puis `systemctl restart outline`</td></tr><tr data-sourcepos="125:1-125:125"><td data-sourcepos="125:2-125:37">Erreur de certificat dans les logs</td><td data-sourcepos="125:39-125:67">GitLab en HTTPS auto-signé</td><td data-sourcepos="125:69-125:124">GitLab doit avoir un certificat valide (Let's Encrypt)</td></tr><tr data-sourcepos="126:1-126:94"><td data-sourcepos="126:2-126:18">`invalid_scope`</td><td data-sourcepos="126:20-126:55">Scopes manquants dans l'app GitLab</td><td data-sourcepos="126:57-126:93">Cocher `openid`, `profile`, `email`</td></tr><tr data-sourcepos="127:1-127:147"><td data-sourcepos="127:2-127:28">Boucle de redirection 301</td><td data-sourcepos="127:30-127:91">`X-Forwarded-Proto: https` non transmis par le reverse proxy</td><td data-sourcepos="127:93-127:146">Ajouter l'en-tête sur le proxy qui termine le HTTPS</td></tr></tbody></table>

---

## <a aria-hidden="true" class="anchor" id="bkmrk--20"></a>Référence — Endpoints

<table data-sourcepos="133:1-139:85" id="bkmrk-%C3%89l%C3%A9ment-valeur-autho"><thead><tr data-sourcepos="133:1-133:22"><th data-sourcepos="133:2-133:12">Élément</th><th data-sourcepos="133:14-133:21">Valeur</th></tr></thead><tbody><tr data-sourcepos="135:1-135:61"><td data-sourcepos="135:2-135:12">Authorize</td><td data-sourcepos="135:14-135:60">`https://gitlab.improvize.eu/oauth/authorize`</td></tr><tr data-sourcepos="136:1-136:53"><td data-sourcepos="136:2-136:8">Token</td><td data-sourcepos="136:10-136:52">`https://gitlab.improvize.eu/oauth/token`</td></tr><tr data-sourcepos="137:1-137:59"><td data-sourcepos="137:2-137:11">UserInfo</td><td data-sourcepos="137:13-137:58">`https://gitlab.improvize.eu/oauth/userinfo`</td></tr><tr data-sourcepos="138:1-138:72"><td data-sourcepos="138:2-138:19">Callback Outline</td><td data-sourcepos="138:21-138:71">`https://outline.improvize.eu/auth/oidc.callback`</td></tr><tr data-sourcepos="139:1-139:85"><td data-sourcepos="139:2-139:19">Discovery GitLab</td><td data-sourcepos="139:21-139:84">`https://gitlab.improvize.eu/.well-known/openid-configuration`</td></tr></tbody></table>