27 votes

Usurpation d'identité de Windows à partir de C #

Comment un programme C# exécuté sous LocalSystem l'identité de la connexion de l'identité d'un autre utilisateur temporairement? Grosso modo j'ai un Windows Service que je voudrais que LocalSystem mais à des moments d'usurper l'identité de l'utilisateur XYZ (lors de la connexion à une base de données à l'aide de la sécurité intégrée de windows).

Le plus important de tous: Est-il un moyen de le faire sans connaître l'autre, de l'utilisateur mot de passe?

Remarque: si un mot de passe est obligatoire est-il une stratégie recommandée pour le stockage d'un mot de passe de manière sécurisée (c# et/ou vbscript).

24voto

mundeep Points 2411

Pour l'emprunt d'identité code voir la suite de deux Projet de Code d'articles:

http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

http://www.codeproject.com/KB/cs/zetaimpersonator.aspx

et l'article de base de connaissances Microsoft ils sont basés sur:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q306158

16voto

wj32 Points 4505

Il est possible, bien qu'il vous oblige à faire beaucoup de code. Voir NtCreateToken et CreateToken. Vous avez besoin SeCreateTokenPrivilege, bien que ce ne sera pas un problème puisque vous êtes en cours d'exécution en vertu de l'AUTORITÉ NT\SYSTÈME. Vous pouvez ensuite utiliser le jeton créé à usurper l'identité à l'intérieur d'un thread.

10voto

Franci Penov Points 45358

Réponse courte: vous ne pouvez pas sans le mot de passe utilisateur ou l'utilisateur appelant votre service par le biais de COM.

Usurper l'identité d'un utilisateur dans votre processus, vous devez appeler ImpersonateLoggedOnUser. ImpersonateLoggedOnUser nécessite un jeton de la poignée. Il y a plusieurs façons d'obtenir un jeton de la poignée:

5voto

Renaud Bompuis Points 10330

Pour le mot de passe de stockage de la partie, vous voudrez peut-être avoir un coup d'oeil à cette question posée récemment.

C'était ma réponse:

Vous pourrait/devrait utiliser le DPAPI, l' API de Protection des Données que fournit le chiffrement de stockage.
Il est là juste pour ce type de problème.

Le chiffrement du stockage est basé sur:

  • le compte d'utilisateur, de sorte que seuls les utilisateurs enregistrés peuvent accéder aux données. Cela rend les données transférable vers un autre PC, avec les mêmes informations d'identification utilisateur.
  • la machine, ce qui rend les données accessibles uniquement sur la machine d'installation et non transférable vers un autre PC.

Il y a un dnrTV spectacle avec Karl Franklin montrant exactement ce qui est nécessaire pour mettre en oeuvre, et d'autres fonctions de chiffrement.
Le code source de l'émission est également disponible sur la page.

Il y a, bien sûr, beaucoup d' autres articles sur ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X