Niveaux d’emprunt d’identité (autorisation)
L’énumération SECURITY_IMPERSONATION_LEVEL définit quatre niveaux d’emprunt d’identité qui déterminent les opérations qu’un serveur peut effectuer dans le contexte du client.
Niveau d'emprunt d'identité | Description |
---|---|
SecurityAnonymous | Le serveur ne peut pas emprunter l’identité ou identifier le client. |
SecurityIdentification | Le serveur peut obtenir l’identité et les privilèges du client, mais ne peut pas emprunter l’identité du client. |
SecurityImpersonation | Le serveur peut emprunter l’identité du contexte de sécurité du client sur le système local. |
SecurityDelegation | Le serveur peut emprunter l’identité du contexte de sécurité du client sur des systèmes distants. |
Le client d’une connexion de canal, RPC ou DDE nommée peut contrôler le niveau d’emprunt d’identité. Par exemple, un client de canal nommé peut appeler la fonction CreateFile pour ouvrir un handle sur un canal nommé et spécifier le niveau d’emprunt d’identité du serveur.
Lorsque le canal nommé, rpc ou connexion DDE est distant, les indicateurs passés à CreateFile pour définir le niveau d’emprunt d’identité sont ignorés. Dans ce cas, le niveau d’emprunt d’identité du client est déterminé par les niveaux d’emprunt d’identité activés par le serveur, qui sont définis par un indicateur sur le compte du serveur dans le service d’annuaire. Par exemple, si le serveur est activé pour la délégation, le niveau d’emprunt d’identité du client est également défini sur la délégation même si les indicateurs passés à CreateFile spécifient le niveau d’emprunt d’identité d’identification.
Les clients DDE utilisent la fonction DdeSetQualityOfService avec la structure SECURITY_QUALITY_OF_SERVICE pour spécifier le niveau d’emprunt d’identité. Le niveau SecurityImpersonation est la valeur par défaut pour les serveurs de canal nommé, RPC et DDE. Les fonctions ImpersonateSelf, DuplicateToken et DuplicateTokenEx permettent à l’appelant de spécifier un niveau d’emprunt d’identité. Utilisez la fonction GetTokenInformation pour récupérer le niveau d’emprunt d’identité d’un jeton d’accès.
Au niveau de SecurityImpersonation, la plupart des actions du thread se produisent dans le contexte de sécurité du jeton d’emprunt d’identité du thread plutôt que dans le jeton principal du processus qui possède le thread. Par exemple, si un thread d’emprunt d’identité ouvre un objet sécurisable, le système utilise le jeton d’emprunt d’identité pour case activée l’accès du thread. De même, si un thread d’emprunt d’identité crée un nouvel objet, par exemple en appelant la fonction CreateFile , le propriétaire du nouvel objet est le propriétaire par défaut du jeton d’accès du client.
Toutefois, le système utilise le jeton principal du processus plutôt que le jeton d’emprunt d’identité du thread appelant dans les situations suivantes :
- Si un thread d’emprunt d’identité appelle la fonction CreateProcess , le nouveau processus hérite toujours du jeton principal du processus.
- Pour les fonctions qui nécessitent le privilège SE_TCB_NAME, comme la fonction LogonUser , le système recherche toujours le privilège dans le jeton principal du processus.
- Pour les fonctions qui nécessitent le privilège SE_AUDIT_NAME, comme la fonction ObjectOpenAuditAlarm , le système recherche toujours le privilège dans le jeton principal du processus.
- Dans un appel à la fonction OpenThreadToken , un thread peut spécifier si la fonction utilise le jeton d’emprunt d’identité ou le jeton principal pour déterminer s’il faut accorder l’accès demandé.