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



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

注意:这是一个桌面应用程序,而不是一个网络应用程序。

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

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

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

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

最新更新