Question

Je peux utiliser ce code pour obtenir le GUID et SID de l'utilisateur actuellement connecté:

UserPrincipal user = System.DirectoryServices.AccountManagement.UserPrincipal.Current;
Console.WriteLine("{0}, {1}", user.Guid, user.Sid);

Toutefois, si l'utilisateur se connecte sans être connecté au réseau, ce code échoue ("le serveur ne peut pas être contacté.").Je peux obtenir le SID de cet utilisateur, même s'ils ne sont pas connectés, comme ceci:

WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
Console.WriteLine("{0}", identity.User.Value);

Mais l'objet Windowsidentity ne contient pas de GUID, autant que je sache.

Comment puis-je obtenir le GUID de l'utilisateur actuel, s'ils ne sont pas connectés au réseau?

Remarque: Ceci est une application de bureau, pas une application Web.

Était-ce utile?

La solution

L'identificateur de sécurité (SID) fait partie de chaque jeton de processus, c'est l'identificateur de l'utilisateur réel.Lorsque vous êtes dans le groupe de travail, il est stocké dans le SAM (une partie du registre) de chaque ordinateur, lorsque vous êtes dans le domaine, il est stocké en tant qu'attribut d'un objet utilisateur dans le répertoire actif.

Le GUID est également un attribut d'un objet utilisateur dans le répertoire actif, mais il est principal pour assurer l'unicité de cet objet.

Autant que je comprenne, le GUID ne fait pas partie de la sécurité de Windows, je ne suis donc pas surprenant que ce n'est pas disponible en mode disconé.

Autres conseils

Le SID est stocké dans le jeton de sécurité de l'utilisateur, c'est pourquoi vous pouvez y accéder hors ligne.Le GUID est préservé lors d'une démarche intra-forêt (donc entre les domaines dans la même forêt), alors l'utiliser comme votre clé est une bonne idée.Comme il ne change jamais, pourquoi ne pas persister le guid de l'utilisateur au registre la première fois que vous démarrez l'application?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top