# Les layers `authn-*` Les layers `authn-*` permettent d'activer différents modes d'authentification au sein d'un proxy Bouncer. Les informations liées à l'utilisateur authentifié sont ensuite injectables dans les entêtes HTTP de la requête permettant ainsi une authentification unique("SSO") basée sur les entêtes HTTP ("Trusted headers SSO"). ## Layers - [`authn-oidc`](./oidc.md) - Authentification OpenID Connect ## Schéma des options En plus de leurs options spécifiques tous les layers `authn-*` partagent un certain nombre d'options communes. Voir le [schéma](../../../../../internal/proxy/director/layer/authn/layer-options.json). ## Règles d'injection d'entêtes L'option `headers.rules` permet de définir une liste de règles utilisant un DSL permettant de définir de manière dynamique quels entêtes seront injectés dans la requête transitant par le layer à destination du service distant. La liste des instructions est exécutée séquentiellement. Bouncer utilise le projet [`expr`](https://expr-lang.org/) comme DSL. En plus des fonctionnalités natives du langage, Bouncer ajoute un certain nombre de fonction spécifique à son contexte. Le comportement des règles par défaut est le suivant: 1. L'ensemble des entêtes HTTP correspondant au patron `Remote-*` sont supprimés ; 2. L'identifiant de l'utilisateur identifié (`user.subject`) est exporté sous la forme de l'entête HTTP `Remote-User` ; 3. L'ensemble des attributs de l'utilisateur identifié (`user.attrs`) sont exportés sous la forme `Remote-User-Attr-` où `` est le nom de l'attribut en minuscule, avec les `_` transformés en `-`. ### Fonctions #### `set_header(name string, value string)` Définir la valeur d'une entête HTTP via son nom `name` et sa valeur `value`. #### `del_headers(pattern string)` Supprimer un ou plusieurs entêtes HTTP dont le nom correspond au patron `pattern`. Le patron est défini par une chaîne comprenant un ou plusieurs caractères `*`, signifiant un ou plusieurs caractères arbitraires. ### Environnement Les règles ont accès aux variables suivantes pendant leur exécution. #### `user` L'utilisateur identifié par le layer. ```json { // Identifiant de l'utilisateur, tel que récupéré par le layer "subject": "", // Table associative des attributs associés à l'utilisateur // La liste de ces attributs dépend du layer d'authentification "attrs": { "key": "" } } ```