GUID пользователя при отключении от сети - PullRequest
1 голос
/ 08 марта 2012

Я могу использовать этот код для получения идентификатора GUID и SID текущего пользователя, вошедшего в систему:

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

Однако, если пользователь входит в систему без подключения к сети, этот код завершается ошибкой ("с сервером невозможно связаться. ").Я могу получить SID этого пользователя, даже если он не подключен, например:

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

Но, насколько я могу судить, объект WindowsIdentity не содержит GUID.

Как я могу получить GUID текущего пользователя, если он не подключен к сети?

ПРИМЕЧАНИЕ. Это настольное приложение, а не вебприложение.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Идентификатор безопасности (SID) является частью каждого токена процесса, это настоящий идентификатор пользователя.Когда вы находитесь в рабочей группе, он хранится в SAM (часть реестра) каждого компьютера, а когда вы находитесь в домене, он хранится как атрибут объекта пользователя в Active-Directory.

GUID также являетсяатрибут объекта пользователя в Active-Directory, но его главная цель - обеспечить уникальность этого объекта.

Насколько я понимаю, GUID не является частью безопасности Windows, поэтому я не удивлюсь, что этов недоступном режиме он недоступен.

0 голосов
/ 10 марта 2012

SID хранится в токене безопасности пользователя, поэтому вы можете получить к нему доступ в автономном режиме.GUID сохраняется при перемещении внутри леса (например, между доменами в одном лесу), поэтому использование его в качестве ключа является хорошей идеей.Поскольку он никогда не меняется, почему вы не сохраните GUID пользователя в реестре при первом запуске приложения?

...