# Configuration de l'authentification CAS

*Cette page s'adresse aux administrateurs système en charge de ScoDoc.*

Le CAS, *Central Authentication Service* CAS est un système d'authentification
unique (SSO) très utilisé dans les universités. Il permet à l'utilisateur de
s'identifier sur un site unique (souvent appelé "ENT" en raccourci), pour
ensuite accéder aux différents services. Il évite de s'authentifier à
chaque fois qu'on accède à une application en mettant en place un système de
ticket.

Notons que le CAS peut introduire des faiblesses dans l'application:

- indisponibilité ou lenteur du service;
- vulnérabilité si le serveur CAS (ou l'annuaire sur lequel il s'appuie) venait
  à être piraté.

Il est donc conseillé de s'assurer du bon fonctionnement et de la sécurisation de
son service CAS avant d'aller plus loin.

## Comptes utilisateurs ScoDoc et CAS

Rappel: voir [Gestion des utilisateurs](AdminUsers.md)

Pour simplifier, l'utilisateur va partir de ScoDoc, passer par le site CAS (redirection), puis
revenir si l'authentification réussi, avec un jeton et un identifiant CAS. À ce moment, ScoDoc cherche s'il a un
utilisateur ayant l'identifiant donné, dans le champ `cas_id`de sa base
utilisateur. Si oui, il ouvre une session pour cet utilisateur, avec ses rôles
et permissions.

## Paramètres spécifiques pour le CAS

### Configuration générale

Les pages de configuration générale de ScoDoc sont accessibles via la page
d'accueil, uniquement lorsqu'on est connecté comme super-admin.

![accès au panneau de config](fig/config-accueil.png)

De cette page, on accède à la page consacrée au CAS:

![config du CAS](fig/config-cas.png)

Page sur laquelle on va pouvoir spécifier:

- si on active le CAS (ce qui permet aussi de le désactiver globalement);
- si on force son utilisation;
- l'URL complète du serveur CAS (exemple: `https://mon.serveur.cas.fr:1234/cas/`);
- un attribut pour l'identification (laisser vide normalement);
- si on veut vérifier le certificat SSL (normalement oui, par sécurité, et
  fournir le fichier certificat PEM dans le champ suivant).

Si l'option **Forcer l'utilisation du CAS** est activée, l'utilisateur qui tente
de se connecter sera immédiatement redirigé vers la page du CAS. Sinon, il aura
le choix via le formulaire classique, avec un lien en plus:

![login scodoc avec CAS](fig/config-cas-cnx.png)

🚸 Attention, le lien de réinitialisation du mot de passe ne concerne évidemment
pas le mot de passe du CAS, mais celui de ScoDoc. C'est ennuyeux.

À ce stade, CAS est utilisable, mais on n'a aucun utilisateur reconnu !

### Configuration des utilisateurs

ScoDoc doit connaitre l'identifiant CAS de ses utilisateurs. A défaut d'un
annuaire, il va falloir saisir ces identifiants pour chaque compte. On peut le
faire via le formulaire habituel de paramétrage du compte utilisateur, ou bien
par import Excel.

Cette configuration n'est accessible qu'au super-admin.

![form. config. utilisateur](fig/config-cas-user.png)

Ici trois champs nous intéressent:

- **Identifiant CAS**: nécessaire
- **Autorise connexion via CAS**: spécifie si ce compte peut ou non se connecter via CAS.
- **Autorise connexion via ScoDoc**: spécifie si cet utilisateur peut se connecter via
  ScoDoc, sans CAS, lorsque le CAS est activé et forcé. Ceci est nécessaire par
  exemple pour des comptes utilisés pour l'API, ou bien pour des personnes
  extérieures à l'établissement et qui ne seraient pas (encore) dans le CAS.

En cas de besoin, les comptes "super-admin" peuvent toujours se connecter à ScoDoc sans CAS: si le
forçage est activé, il leur faut passer par une adresse spéciale:

```text
 https://votre.serveur.scodoc.fr/auth/login_scodoc
```

(remplacer `https://votre.serveur.scodoc.fr` par le début de l'adresse de votre serveur).

🚸 **Attention**: en général, les **clients d'API** (et notamment la
"passerelle") n'utilisent pas le CAS: si vous forcez les utilisateurs à utiliser
le CAS, pensez à autoriser les comptes de l'API à se connecter sur ScoDoc sans
CAS.

## Sécurité: permissions et informations

L'utilisateur connecté via CAS a exactement les mêmes permissions que s'il
s'était connecté via ScoDoc.

### Permission

Le paramétrage CAS au niveau général nécessite la permission `Super Administrateur`.

Il est naturel de déléguer la création des comptes utilisateurs ScoDoc aux
responsables de département ou à leur représentant. Toutefois, le réglage CAS
pourrait créer des problèmes de sécurité (par exemple affecter à un département
un utilisateur CAS qui n'en fait pas réellement partie). 

Le CAS ajoute une permission ScoDoc `ScoUsersChangeCASId` qui contrôle la
possibilité de changer l'identifiant CAS d'un compte. Cette permission peut ou
non être associée au rôle `Admin` d'un département, selon la politique de
l'établissement.

Les réglages par compte **Autorise connexion via CAS**
et **Autorise connexion via ScoDoc** sont réservés au `Super Administrateur`.

### Informations sur un utilisateur

Le super-administrateur (et elle seule) peut visualiser les dates de:

- dernière utilisation (date du dernier chargement de page);
- dernière connexion (login) via CAS.

dans les tables d'utilisateurs et sur la page de chaque compte:

![Informations sur un utilisateur](fig/config-user-view.png)

### Logs

Les connexions et tentatives de connexions via CAS sont logguées au niveau
`INFO`, qui arrive par défaut dans `/opt/scodoc-data/scodoc.log`.
Exemples:

- Connexion réussie:

```text
  INFO: CAS: login user_name
```

- Tentative de connexion CAS réussie mais utilisateur non reconnu par ScoDoc:

```text
INFO: CAS login denied for  cas_id=prenom.nom (unknown or inactive)
```

## Accès via l'API

L'authentification des clients de l'API utilise un jeton (*token*), qui est
demandé par l'appel `/ScoDoc/api/tokens` (qui lui même appelle
`User.get_token()`). Ce mécanisme ne passe jamais par le CAS, à condition que le
compte utilisateur utilisé par l'API soit "*Autorisé à se connecter via ScoDoc*"
(voir le formulaire plus haut, [configuration des
utilisateurs](#configuration-des-utilisateurs)). 


!!! note "Voir aussi"

    - [Gestion des utilisateurs](AdminUsers.md)
    - [Rôles et permissions](ConfigPermissionsDept.md)
    - [Config. des rôles et permissions en ligne de commande](GuideConfig.md#creation-dun-nouveau-role)
    - [Guide administrateur ScoDoc](GuideAdminSys.md)
    - [API pour ScoDoc 9](ScoDoc9API.md)
    - [FAQ](FAQ.md)
    - [Contacts](Contact.md)
