Dns 未连接到域时如何获取Active Directory域组列表

Dns 未连接到域时如何获取Active Directory域组列表,dns,active-directory,sid,active-directory-group,windows-principal,Dns,Active Directory,Sid,Active Directory Group,Windows Principal,在我的公司,我们有一个定制的人机界面。如果用户愿意,此HMI可以使用计算机域登录。这是我们目前正在尝试解决的情况 当用户以域用户身份登录Windows时,他们使用相同的Windows凭据登录HMI-一切顺利 网络连接中断,用户重新启动计算机 用户可以像以前一样使用相同的域登录登录到Windows(Windows缓存用户允许此操作) 用户尝试登录到我们的HMI,但他们无法登录,因为我还不知道如何访问这些缓存的active directory用户 下面是我现在使用的代码,用于检测用户是否是允许登录H

在我的公司,我们有一个定制的人机界面。如果用户愿意,此HMI可以使用计算机域登录。这是我们目前正在尝试解决的情况

  • 当用户以域用户身份登录Windows时,他们使用相同的Windows凭据登录HMI-一切顺利

  • 网络连接中断,用户重新启动计算机

  • 用户可以像以前一样使用相同的域登录登录到Windows(Windows缓存用户允许此操作)

  • 用户尝试登录到我们的HMI,但他们无法登录,因为我还不知道如何访问这些缓存的active directory用户

  • 下面是我现在使用的代码,用于检测用户是否是允许登录HMI的组之一的成员。这些组存储在我们的SQL数据库中,并存储为字符串,例如
    SERVER\BUILDER

    If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
                tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
                AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
                WinPrincipal = New WindowsPrincipal(tempWindowsIdentity)
    End If
    
    If WinPrincipal.IsInRole(user.Group) Then
                'Success - obviously there's more code after this
    End If
    
    然后我像这样查找组名

    If File.Exists(FILEPATH) = True Then
            Dim reader As New StreamReader(FILEPATH)
            While Not reader.EndOfStream
                Dim sTemp() As String = reader.ReadLine.Split(",")
                If groupName.Equals(sTemp(0)) Then
                    Return New SecurityIdentifier(sTemp(1))
                End If
            End While
        End If
    
    当不在网络上时,我无法将组名转换为SID的原因是,
    IdentityReference.translate
    由于无法查看域而引发异常

    所以,在所有这些解释之后,我终于找到了我想要的。我认为我必须在某个地方访问才能从组名中获取SID,因为windows必须将其存储在某个地方,否则在未连接到网络时我将无法登录到windows


    我已经做了大量的搜索,但我无法找出这些缓存的凭据存储在哪里。任何帮助都将不胜感激,如果我不够清楚,请让我知道,我会尽力解释。

    我知道它很旧,但对我来说是真实的。 作为一篇熟悉的帖子,我将链接以下内容:


    建议的解决方案是将SID存储在本地空间中,这似乎是最好的主意。

    您知道,我实际上忘记了更新它,但这就是我最终要做的。我加密了我们数据库中的SID,它似乎起作用了。谢谢你的回答。
    If File.Exists(FILEPATH) = True Then
            Dim reader As New StreamReader(FILEPATH)
            While Not reader.EndOfStream
                Dim sTemp() As String = reader.ReadLine.Split(",")
                If groupName.Equals(sTemp(0)) Then
                    Return New SecurityIdentifier(sTemp(1))
                End If
            End While
        End If