Obtenir le nom d'utilisateur lors de l'emprunt d'identité
Je suis en utilisant la méthode suivante pour usurper l'identité d'un utilisateur dans mon code:
Comment voulez-vous faire d'emprunt d'identité .NET?
Dans une autre classe, j'ai besoin de savoir le courant de l'utilisateur (comme "mydomain\moose"), mais je n'ai aucune idée de si je suis en train d'usurper l'identité d'un autre utilisateur ou pas.
Comment puis-je obtenir le nom d'utilisateur, si je suis d'usurper l'identité de quelqu'un?
Système.De l'environnement.Nom d'utilisateur et le Système.De sécurité.Principal.WindowsIdentity.GetCurrent().Nom fois de retour à l'utilisateur d'origine, pas le actuellement avec emprunt d'identité de l'utilisateur.
Plus De Détails:
Je suis en train de faire cette usurpation d'identité afin que je puisse accéder à certains fichiers dans un netowrk part de l'utilisateur n'a généralement pas accès.
Si j'utilise un type de connexion de LOGON32_LOGON_INTERACTIVE, je ne vois que le nouvel utilisateur, mais je ne peut pas accéder au partage réseau. Si j'utilise un type de connexion de LOGON32_LOGON_NEW_CREDENTIALS (d'une valeur de 9), je peux accéder au partage réseau, mais je ne vois pas le nouvel utilisateur dans l'Environnement.Nom d'utilisateur.
Je viens de tester à l'aide de l'identité de l'utilisateur pour accéder à un répertoire de mon utilisateur connecté n'a pas accès. Je peux accéder à l'annuaire, mais les deux méthodes de toujours retourner à l'utilisateur d'origine. une fois que j'ai arrêter l'usurpation d'identité, je reçois accès refusé essayez d'accéder à l'annuaire, donc je sais que c'est usurper l'identité correctement.
Ajouté plus de détails. Semble être le type d'ouverture de session à l'origine du problème.
Voir msdn.microsoft.com/en-us/library/windows/desktop/.... Vous pouvez essayer de
LOGON32_LOGON_BATCH
. Pour NEW_CREDENTIALS cela ne fonctionne pas car "La nouvelle ouverture de session a le même identifiant local, mais utilise les informations d'identification différentes pour d'autres connexions réseau."OriginalL'auteur Moose | 2011-09-30
Vous devez vous connecter pour publier un commentaire.
COMMENCER EDIT:
J'ai réalisé que ma première tentative de répondre à la question n'était pas très clair. Donc, j'aimerais
démarrer une autre tentative:
Tout d'abord, je tiens à souligner ce que la propriété
WindowsIdentity.GetCurrent().Name
sera de retoursi vous utilisez
LOGON32_LOGON_NEW_CREDENTIALS
ouLOGON32_LOGON_INTERACTIVE
que le type de connexion pour le LogonUser (à l'intérieur de l'usurpation de l'identité de la classe de) fonction:À l'aide de
LOGON32_LOGON_INTERACTIVE
À l'aide de
LOGON32_LOGON_NEW_CREDENTIALS
C'est le comportement que vous avez décrit dans votre question et est conforme à la description sur le site MSDN pour la
LogonUser
fonction. PourLOGON32_LOGON_NEW_CREDENTIALS
l'utilisateur créé jeton est juste un clone de l'utilisateur actuel jeton. Cela signifie que la création de la session utilisateur a le même identifiant que le thread appelant. La transmission des informations d'identification pour leLogonUser
fonction ne sont utilisés que pour les connexions réseau.Deuxièmement, permettez-moi de souligner deux situation où le décrit la différence entre
LOGON32_LOGON_INTERACTIVE
etLOGON32_LOGON_NEW_CREDENTIALS
devient clair:Vous exécutez votre programme sur computer_A (sous le compte de user_A). Vous vous faites passer pour user_b' (à l'aide de
LOGON32_LOGON_INTERACTIVE
). Ensuite, vous vous connectez sur le partage réseau sur computer_B et essayez de copier un fichier vers le dossier local (uniquement user_A a la permission d'écrire dans ce dossier). Ensuite, vous obtenez un message d'erreur accès refusé, parce que l'opération de fichier se fait avec les autorisations de user_b'qui n'a pas l'autorisation sur le dossier local.Même situation que ci-dessus. Mais maintenant, nous utilisons
LOGON32_LOGON_NEW_CREDENTIALS
à usurper l'identité d'user_b'. Nous vous connecter à un lecteur réseau " et copier un fichier à partir du lecteur réseau vers le dossier local. Dans ce cas, l'opération réussit, car l'opération de fichier se fait avec les autorisations de user_A.FIN MODIFIER
Espère que, cela aide.
Si vous avez juste besoin de savoir si ou non vous usurpant l'identité de alors un coup d'oeil a la suite de stackoverflow question/réponse: stackoverflow.com/questions/3973982/...
J'ai juste besoin de savoir comment faire pour obtenir l'identité de l'utilisateur et cela m'a donné exactement ce que je cherchais. GÉNIAL!
C'est une EXCELLENTE explication de la façon dont LOGON32_LOGON_NEW_CREDENTIALS œuvres. Merci!!!!
OriginalL'auteur
Selon l'exemple à http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx d'identité en cours de modifications au cours de l'usurpation d'identité. Êtes-vous sûr que votre code est à l'intérieur de l'identité de bloc de code?
OriginalL'auteur
J'ai écrit une classe d'assistance qui n':
Vous pouvez l'utiliser comme ça:
Plus d'explications et des exemples que vous pouvez trouver ici :
Usurpation de l'identité d'CurrentUser de SYSTÈME
OriginalL'auteur
Prendre un coup d'oeil à
QueryCredentialsAttributes
.OriginalL'auteur