2012-03-07 3 views
1

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

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 текущего пользователя, если он не подключен к сети?

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

+0

Вы, вероятно, не можете! – EJP

+0

Можете ли вы вдаваться в подробности? Я не совсем понимаю, как это работает. Почему я могу получить SID, если они не в сети, но не GUID? – Mud

+0

Мне интересно, GUID удерживается только на сервере. – EJP

ответ

1

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

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

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

+0

Darn. [В этой статье] (http://technet.microsoft.com/en-us/library/cc961625.aspx) говорится, что SID пользователя изменяется, когда он перемещает домены, а его идентификатор GUID - нет. Мне нужно сохранить токен, который представляет пользователя, поэтому я могу опознать его позже (обычная схема аутентификации, работающая за пределами Windows), и я не хочу, чтобы он был сломан, когда он перемещает домены, и я не хочу поддерживать похоже, делает список истории SID, подобный Windows. Возможность получить доступ к этому GUID будет очень приятной. – Mud

+0

Насколько я знаю, единственным решением для вас является запрос GUID из Active Directory. – JPBlanc

0

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

Смежные вопросы