Sessions et statut de l’utilisateur
Les instances de l’orchestrateur gardent une trace des sessions et de l’état de l’utilisateur. Il est important de garder à l’esprit qu’une session
Maverics contient bien plus que l’état d’authentification de l’utilisateur. C’est pourquoi elles ne doivent pas être confondues avec les sessions d’authentification représentées dans un cookie de session ou une base de données de session.
Par exemple, un orchestrateur peut rediriger un utilisateur vers un fournisseur d’identité tel qu’Azure AD pour l’authentification. En cas de succès, il récupère des attributs supplémentaires à partir d’un service d’annuaire, d’une base de données ou d’un service exposé à l’API. La session authentifiée, les attributs de l’utilisateur et toute autre information associée à la requête constituent l’état de l’utilisateur et sont conservés dans la session
Maverics. Cet état est utilisé par les composants de l’orchestrateur pour étendre un service d’identité en nuage tel qu’Azure AD afin de protéger les applications sur site ou de migrer les utilisateurs et leurs informations d’identification des systèmes d’identité sur site vers un système d’accès hébergé sur le cloud.
Options de configuration
session
indique l’ensemble des options de configuration pour la gestion de la session.
Cookie
cookie
est un champ facultatif utilisé pour définir les paramètres du cookie HTTP qui est
utilisé pour relier un utilisateur à sa session.
Domain
domain
est un champ facultatif qui spécifie les hôtes vers lesquels le cookie de session
sera envoyé. En principe, ce paramètre ne doit être défini que lors de l’accès par proxy à plusieurs applications sur un
même domaine. S’il n’est pas défini, le cookie domain attribute
sera configuré sur le nom d’hôte demandé par le client.
Par exemple, si la valeur domain
est définie sur example.com
, l’agent utilisateur inclura le
cookie dans l’en-tête Cookie
lors des requêtes HTTP adressées à example.com
et à tous
les sous-domaines de *.example.com
.
Name
name
correspond à un champ facultatif qui spécifie le nom du cookie de session utilisé par
l’orchestrateur Maverics. Le nom de cookie de session par défaut est maverics_session
.
Disable HTTP Only
disableHTTPOnly
est un champ facultatif qui permet de désactiver
l’attribut de cookie HttpOnly
. La valeur par défaut
est « false ». Si la valeur est « true », le cookie de session ne disposera pas de l’attribut HttpOnly
,
permettant d’accéder au cookie via des scripts côté client.
Disable Secure
disableSecure
est un champ facultatif qui permet de désactiver
l’attribut de cookie Secure
.
La valeur par défaut est « false ». Si la valeur est « true », le cookie de session ne disposera pas de l’attribut Secure
,
permettant au navigateur d’envoyer le cookie par le biais d’une requête HTTP non cryptée.
Max Lifetime
maxLifetimeSeconds
est un champ facultatif qui représente le nombre maximum de secondes
pouvant s’écouler après l’authentification avant que l’état d’authentification d’une session ne soit
invalidé. Si une valeur négative est spécifiée, la session restera authentifiée
indéfiniment. Si aucune valeur n’est spécifiée, la valeur par défaut est de 24 heures.
Idle Timeout
idleTimeout
est un champ facultatif qui représente le nombre de secondes durant lequel une session peut
rester inactive avant de se terminer. Si aucune valeur n’est définie ou si IdleTimeout est fixé à 0,
le délai d’inactivité de la session est désactivé.
Eval Session Max Lifetime
evalSessionMaxLifetimeSE
est un champ facultatif permettant de définir une extension de services qui
détermine la manière dont les sessions atteignant leur durée de vie maximale sont gérées. maxLifetimeSeconds
est toujours utilisé pour les attributs à expiration individuelle.
Eval Session Idle Timeout
evalSessionIdleTimeoutSE
est un champ facultatif permettant de définir une extension de services qui
détermine la manière dont les délais d’inactivité de la session sont gérés. Si cette extension de services est
définie, la valeur idleTimeout
est ignorée.
Cache Size
cacheSize
est un champ facultatif qui limite le nombre de sessions conservées en
mémoire. Une fois que le cache de session a atteint sa capacité maximale et qu’une nouvelle session est
demandée, le gestionnaire de session retire du cache la session la moins récente
afin de faire de la place pour la nouvelle. Si le champ cacheSize
n’est pas défini, une valeur par défaut
de 50 000 sessions d’utilisateurs sera appliquée.
Exemples
Configuration de base
session:
cookie:
domain: example.com
disableHTTPOnly: false
disableSecure: false
maxLifetimeSeconds: 3600
idleTimeout: 1800
Expiration de la session via l’extension de services
Une extension de services permet une flexibilité totale dans le processus de contrôle de la durée de vie d’une session utilisateur.
Les délais de session sont vérifiés avant toute vérification d’authentification. Si
evalSessionMaxLifetimeSE
ou evalSessionIdleTimeoutSE
renvoie la valeur « true », la session actuelle de l’utilisateur
sera supprimée et l’utilisateur devra s’authentifier à nouveau auprès de
tous les fournisseurs d’identité ayant été associés à cette session.
Extension de services evalSessionMaxLifetimeSE
Cette extension de services renvoie une valeur booléenne indiquant que la session de l’utilisateur a
atteint sa durée de vie maximale, ce qui permet un comportement personnalisé lors de la vérification. En règle générale,
ceci peut être déterminé en se basant sur l’heure à laquelle la session a été créée, transmise en tant que
paramètre. La valeur maxLifetimeSeconds
est toujours utilisée pour invalider des
requêtes spécifiques des fournisseurs d’identité et des statuts d’authentification.
session:
cookie:
domain: example.com
maxLifetimeSeconds: 3600
evalSessionMaxLifetimeSE:
funcName: EvalMaxLifetime
file: /etc/maverics/extensions/session.go
/etc/maverics/extensions/session.go
package main
import (
"net/http"
"time"
)
func EvalMaxLifetime(rw http.ResponseWriter, req *http.Request, createdAt time.Time) bool {
// If the session has reached its maximum lifespan then force logout.
if createdAt.Before(time.Now().Add(-time.Duration(3600) * time.Second)) {
http.Redirect(rw, req, "https://example.com/single-logout", 302)
return true
}
return false
}
Extension de services evalSessionIdleTimeoutSE
Cette extension de services renvoie une valeur booléenne indiquant que la session de l’utilisateur est
restée inactive et a expiré. En règle générale, cela peut être déterminé en se basant sur la dernière heure d’accès
qui est transmise en tant que paramètre à l’extension de services. Si cette extension de services est
définie, la valeur idleTimeout
est ignorée.
session:
cookie:
domain: example.com
evalSessionIdleTimeoutSE:
funcName: EvalIdleTimeout
file: /etc/maverics/extensions/session.go
/etc/maverics/extensions/session.go
package main
import (
"net/http"
"time"
)
func EvalIdleTimeout(rw http.ResponseWriter, req *http.Request, lastAccess time.Time) bool {
// If the session becomes idle then force logout.
if lastAccess.Before(time.Now().Add(-time.Duration(1800) * time.Second)) {
http.Redirect(rw, req, "https://example.com/single-logout", 302)
return true
}
return false
}