Pergunta

Posso usar este código para obter o GUID e o SID do usuário conectado no momento:

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

Porém, se o usuário fizer login sem estar conectado à rede, esse código falhará ("O servidor não pode ser contatado.").Posso obter o SID desse usuário, mesmo que ele não esteja conectado, assim:

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

Mas o objeto WindowsIdentity não contém um GUID, pelo que sei.

Como posso obter o GUID do usuário atual, se ele não estiver conectado à rede?

OBSERVAÇÃO:Este é um aplicativo de desktop, não um aplicativo da web.

Foi útil?

Solução

O Identificador de Segurança (SID) faz parte de cada token de processo, é o identificador real do usuário.Quando você está no WorkGroup ele é armazenado no SAM (parte do registro) de cada computador, quando você está no domínio ele é armazenado como um atributo de um objeto de usuário no Active Directory.

O GUID também é um atributo de um objeto de usuário no Active Directory, mas seu objetivo principal é garantir a unicidade desse objeto.

Pelo que entendi, o GUID não faz parte da segurança do Windows, por isso não me surpreende que ele não esteja disponível no modo desconectado.

Outras dicas

O SID é armazenado no token de segurança do usuário e é por isso que você pode acessá-lo offline.O GUID é preservado durante uma movimentação intrafloresta (ou seja, entre domínios dentro da mesma floresta), portanto, usá-lo como chave é uma boa ideia.Como isso nunca muda, por que você não mantém o GUID do usuário no registro na primeira vez que inicia o aplicativo?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top