Traduction d’extraits de OpenID Connect Core 1.0.
Dans la section ’2. ID Token’ :
acr
OPTIONNEL. Référence de classe de contexte d’authentification. Chaîne spécifiant une valeur de référence de classe de contexte d’authentification qui identifie la classe de contexte d’authentification satisfaite par l’authentification. La valeur "0" indique que l’authentification de l’utilisateur final ne répond pas aux exigences du niveau 1. ISO / IEC 29115 [ISO29115]. L’authentification à l’aide d’un cookie de navigateur de longue durée, par exemple, est un exemple où l’utilisation du "niveau 0" est approprié. Les authentifications de niveau 0 NE DEVRAIENT PAS être utilisées pour autoriser l’accès à toute ressource de quelque valeur monétaire que ce soit. (Cela correspond au PAPIER OpenID 2.0 [OpenID.PAPE] nist_auth_level 0.) Un URI absolu ou un nom enregistré RFC 6711 [RFC6711] DEVRAIT être utilisé comme valeur acr ; les noms enregistrés NE DOIVENT PAS être utilisés avec une signification différente de celle qui est enregistrée. Les parties utilisant cette allégation devront s’entendre sur la signification des valeurs utilisées, qui peuvent être spécifiques au contexte. La valeur acr est une chaîne sensible à la casse.
dans la section ’3.1.2.1. Authentication Request’ :
acr_values
OPTIONNEL. Valeur de "Requested Authentication Context Class Reference". Chaîne séparée par des espaces spécifiant les valeurs acr que le serveur d’autorisations est invité à utiliser pour traiter cette demande d’authentification, les valeurs apparaissant par ordre de préférence. La classe de contexte d’authentification satisfaite par l’authentification effectuée est renvoyée sous la valeur de revendication acr, comme spécifié à la section 2. La revendication acr est demandée en tant que revendication volontaire par ce paramètre.
Niveaux d’acr
OAuthSD définit quatre niveaux d’acr (au moins, le nombre n’est pas limité) attachés aux méthodes d’authentification et définis par un nombre entier, par ordre croissant de sécurité du procédé :
0 : procédé insuffisant
1 : procédé normal : "une étoile" : login/MdP, délégation de l’identification sans TFA.
2 : procédé "deux étoiles",
3 : procédé "trois étoiles".
En cas d’authentification à deux facteurs (TFA) réussie, les niveaux des deux méthodes sont ajoutés, sinon le niveau est 0 si le TFA échoue.
Les méthodes d’authentification et leur acr sont définis dans le fichier de configuration configure_oidc.php.
Le niveau d’acr est inscrit dans le cookie SLI et est retourné dans la charge utile du jeton JWT.
Méthode d’authentification imposée par le client
OAuthSD permet à un client de spécifier des exigences particulières en matière d’identification de l’utilisateur final afin d’atteindre un niveau acr (Authentication Context Class Reference) suffisant.
Cela est défini par deux champs OPTIONNELS de la table des clients, renseignés au moment de l’inscription de l’application sur le serveur OAuthSD :
identity_provider : nom d’une méthode d’identification principale spécifique (password, ghostkeys, kerberos, etc.).
S’il n’est pas défini, le fournisseur d’identité est celui qui est défini par défaut au moyen de la constante de configuration IDENTITY_PROVIDER.
required_acr : valeur d’acr minimale requise par le client (Requested Authentication Context Class Reference). Si le client ne définit pas de valeur d’acr minimale, celle-ci est définie à 0.
Problématique de sécurité et solution
Il se pose alors un problème de sécurité : si une session OIDC est créée avec une méthode faible, le cookie SLI ou le jeton d’identité JWT permettraient d’accéder à une application requérant une méthode plus forte.
Afin de prévenir cela :
Lorsqu’une authentification est effectuée, la valeur de l’acr est inscrite dans le cookie SLI et le jeton d’identité.
Lorsque authorize vérifie le cookie SLI ou le JWT, si l’acr demandé par l’application est supérieur à l’acr du cookie SLI ou du JWT, on invalidera le cookie, ce qui provoquera une nouvelle authentifiction.
Une application ne déclare pas nécessairement l’acr requis, le niveau étant alors 0.