80 lines
3.0 KiB
Markdown
80 lines
3.0 KiB
Markdown
# 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
|
|
- [`authn-network`](./network.md) - Authentification par origine d'accès réseau
|
|
- [`authn-basic`](./basic.md) - Authentification "Basic Auth"
|
|
|
|
## 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).
|
|
|
|
## Moteur de règles
|
|
|
|
L'option `rules` permet de définir une liste de règles utilisant un DSL définissant de manière dynamique quels entêtes seront injectés dans la requête transitant par le layer. Les règles permettent également d'interdire l'accès à un utilisateur via la fonction `forbidden()` (voir section "Fonctions").
|
|
|
|
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 fonctions spécifiques à 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é (`vars.user.subject`) est exporté sous la forme de l'entête HTTP `Remote-User` ;
|
|
3. L'ensemble des attributs de l'utilisateur identifié (`vars.user.attrs`) sont exportés sous la forme `Remote-User-Attr-<name>` où `<name>` est le nom de l'attribut en minuscule, avec les `_` transformés en `-`.
|
|
|
|
### Fonctions
|
|
|
|
#### `forbidden()`
|
|
|
|
Interdire l'accès à l'utilisateur.
|
|
|
|
##### `add_header(ctx, name string, value string)`
|
|
|
|
Ajouter une valeur à un entête HTTP via son nom `name` et sa valeur `value`.
|
|
|
|
##### `set_header(ctx, name string, value string)`
|
|
|
|
Définir la valeur d'un entête HTTP via son nom `name` et sa valeur `value`. La valeur précédente est écrasée.
|
|
|
|
##### `del_headers(ctx, 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.
|
|
|
|
##### `set_host(ctx, host string)`
|
|
|
|
Modifier la valeur de l'entête `Host` de la requête.
|
|
|
|
##### `set_url(ctx, url string)`
|
|
|
|
Modifier l'URL du serveur cible.
|
|
|
|
### Environnement
|
|
|
|
Les règles ont accès aux variables suivantes pendant leur exécution.
|
|
|
|
#### `vars.user`
|
|
|
|
L'utilisateur identifié par le layer.
|
|
|
|
```json
|
|
{
|
|
// Identifiant de l'utilisateur, tel que récupéré par le layer
|
|
"subject": "<string>",
|
|
// Table associative des attributs associés à l'utilisateur
|
|
// La liste de ces attributs dépend du layer d'authentification
|
|
"attrs": {
|
|
"key": "<value>"
|
|
}
|
|
}
|
|
```
|