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
}