与网络断开连接时的用户GUID

时间:2012-03-07 23:15:38

标签: .net active-directory guid sid

我可以使用此代码获取当前登录用户的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?

注意:这是桌面应用程序,而不是Web应用程序。

2 个答案:

答案 0 :(得分:1)

安全标识符(SID)是每个进程令牌的一部分,它是真正的用户标识符。当您在WorkGroup中时,它存储在每台计算机的SAM(注册表的一部分)中,当您在域中时,它将存储为Active-Directory中用户对象的属性。

GUID也是Active-Directory中用户对象的一个​​属性,但它的主要目的是确保此对象的唯一性。

据我所知,GUID不是Windows安全的一部分,所以我并不感到惊讶,因为它在disconected模式下不可用。

答案 1 :(得分:0)

SID存储在用户的安全令牌中,这就是您可以脱机访问它的原因。 GUID在林内移动期间保留(因此在同一个林中的域之间),因此将其用作您的密钥是个好主意。由于它永远不会改变,为什么不在第一次启动应用程序时将用户的GUID持久保存到注册表中?