Jeton d'accès
Dans les systèmes informatiques, un jeton d'accès contient les informations d'identification de sécurité pour une session de connexion et identifie l'utilisateur, ses groupes, ses privilèges et, dans certains cas, une application particulière[1]. Dans certains cas, il peut être demandé d'entrer un jeton d'accès (par exemple 40 caractères aléatoires) plutôt que le mot de passe habituel (il doit donc être gardé secret comme un mot de passe).
Aperçu
Un jeton d'accès est un objet encapsulant l'identité de sécurité d'un processus ou d'un thread[2]. Un jeton est utilisé pour prendre des décisions de sécurité et pour stocker des informations inviolables sur un système. Alors qu'un jeton est généralement utilisé pour représenter uniquement des informations de sécurité, il est capable de contenir des données supplémentaires de libre format qui peuvent être jointes pendant la création du jeton. Les jetons peuvent être dupliqués sans privilège spécial, par exemple pour créer un nouveau jeton avec des niveaux inférieurs de droits d'accès pour restreindre l'accès d'une application lancée. Un jeton d'accès est utilisé par Windows lorsqu'un processus ou un thread essaie d'interagir avec des objets qui ont des descripteurs de sécurité (objets sécurisables)[2]. Sous Windows, un jeton d'accès est représenté par l'objet système de type Token
.
Un jeton d'accès est généré par le service de connexion lorsqu'un utilisateur se connecte au système et les informations d'identification fournies par l'utilisateur sont authentifiées par rapport à la base de données d'authentification. La base de données d'authentification contient les informations d'identification requises pour construire le jeton initial de la session de connexion, notamment son ID utilisateur, son ID de groupe principal, tous les autres groupes dont il fait partie et d'autres informations. Le jeton est attaché au processus initial créé dans la session utilisateur et hérité par les processus suivants créés par le processus initial[2]. Chaque fois qu'un tel processus ouvre un levier vers une ressource dont le contrôle d'accès est activé, Windows réconcilie les données du descripteur de sécurité de l'objet cible avec le contenu du jeton d'accès effectif actuel[3]. Le résultat de cette évaluation de contrôle d'accès indique si un accès est autorisé et, si tel est le cas, quelles opérations (lecture, écriture/modification, etc.) l'application appelante est autorisée à effectuer.
Types de jeton
Deux types de jetons sont disponibles :
- Jeton primaire
- Les jetons primaires ne peuvent être associés qu'à des processus et représentent le sujet de sécurité d'un processus. La création de jetons primaire et leur association à des processus sont deux opérations privilégiées, nécessitant deux privilèges différents au nom de la séparation des privilèges — le scénario typique voit le service d'authentification créer le jeton et un service de connexion l'associer à l'interface du système d'exploitation de l'utilisateur. Les processus héritent initialement d'une copie du jeton principal du processus parent.
- Jeton d'emprunt d'identité
- L'emprunt d'identité est un concept de sécurité implémenté dans Windows NT qui permet à une application serveur d'"être" temporairement le client en termes d'accès aux objets sécurisés. L'emprunt d'identité a quatre niveaux possibles : anonyme, donnant au serveur l'accès d'un utilisateur anonyme/non identifié, identification, laissant le serveur inspecter l'identité du client mais ne pas utiliser cette identité pour accéder aux objets, emprunt d'identité, laissant le serveur agir au nom du client, et délégation, identique à l'emprunt d'identité mais étendu aux systèmes distants auxquels le serveur se connecte (via la conservation des informations d'identification). Le client peut choisir le niveau d'emprunt d'identité maximal (le cas échéant) disponible pour le serveur en tant que paramètre de connexion. La délégation et l'emprunt d'identité sont des opérations privilégiées (l'emprunt d'identité ne l'était pas initialement, mais la négligence historique dans la mise en œuvre des API client ne limitant pas le niveau par défaut à "l'identification", laissant un serveur non privilégié se faire passer pour un client privilégié réticent, l'a appelé). Les jetons d'emprunt d'identité ne peuvent être associés qu'à des threads et représentent le sujet de sécurité d'un processus client. Les jetons d'emprunt d'identité sont généralement créés et associés implicitement au thread actuel, par des mécanismes IPC tels que DCE RPC, DDE et les canaux nommés.
Contenu d'un jeton
Un jeton est composé de divers champs, dont[4] :
- un identifiant.
- l'identifiant de la session de connexion associée. La session est maintenue par le service d'authentification et est remplie par les paquetages d'authentification avec une collection de toutes les informations (informations d'identification) fournies par l'utilisateur lors de la connexion. Les informations d'identification sont utilisées pour accéder aux systèmes distants sans que l'utilisateur ait besoin de se ré-authentifier (authentification unique), à condition que tous les systèmes impliqués partagent une autorité d'authentification (par exemple, un serveur de tickets Kerberos)
- l'identifiant de l'utilisateur. Ce champ est le plus important et il est strictement en lecture seule.
- les identifiants des groupes dont l'utilisateur (ou, plus précisément, le sujet) fait partie. Les identifiants de groupe ne peuvent pas être supprimés, mais ils peuvent être désactivés ou rendus "refuser uniquement". Au plus un des groupes est désigné comme identifiant de session, un groupe volatile représentant la session de connexion, permettant l'accès aux objets volatiles associés à la session, tels que l'affichage.
- les identifiants du groupe restrictif (optionnel). Cet ensemble supplémentaire de groupes n'accorde pas d'accès supplémentaire, mais le restreint davantage : l'accès à un objet n'est autorisé que s'il est également autorisé à l'un de ces groupes. Les groupes de restriction ne peuvent pas être supprimés ni désactivés. Les groupes de restriction sont un ajout récent et ils sont utilisés dans la mise en œuvre des bacs à sable.
- les privilèges, c'est-Ă -dire les capacitĂ©s spĂ©ciales dont dispose l'utilisateur. La plupart des privilèges sont dĂ©sactivĂ©s par dĂ©faut, pour Ă©viter les dommages causĂ©s par des programmes non soucieux de la sĂ©curitĂ©. Ă€ partir de Windows XP Service Pack 2 et Windows Server 2003, les privilèges peuvent ĂŞtre dĂ©finitivement supprimĂ©s d'un jeton par un appel Ă
AdjustTokenPrivileges()
avec l'attributSE_PRIVILEGE_REMOVED
. - le propriétaire par défaut, le groupe principal et l'ACL pour le jeton créé par le sujet associé au jeton.
Voir aussi
- Clé API
- Identité basée sur les revendications
- ID de session
- Jeton Web JSON
Références
- « Access Token: Definition, Architecture, Usage & More », Okta (consulté le )
- « Access Tokens », MSDN (consulté le )
- « AccessCheck », MSDN (consulté le )
- « How Access Tokens Work », MSDN (consulté le )