Comment un programme C # exécuté en tant que LocalSystem peut-il emprunter l'identité de connexion d'un autre utilisateur temporairement? En gros, j'ai un service Windows que je voudrais exécuter en tant que LocalSystem, mais parfois 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: existe-t-il un moyen de le faire sans connaître le mot de passe de l'autre utilisateur?
Remarque: si un mot de passe est obligatoire, existe-t-il une stratégie recommandée pour stocker un mot de passe en toute sécurité (c # et/ou vbscript).
C'est possible, même si cela vous oblige à faire beaucoup de code. Voir NtCreateToken et CreateToken . Vous avez besoin de SeCreateTokenPrivilege, bien que cela ne soit pas un problème car vous exécutez sous NT AUTHORITY\SYSTEM. Vous pouvez ensuite utiliser le jeton créé pour emprunter l'identité d'un thread.
Réponse courte: vous ne pouvez pas vous passer du mot de passe utilisateur ou de l'utilisateur appelant votre service via COM.
Pour emprunter l'identité d'un autre utilisateur dans votre processus, vous devez appeler ImpersonateLoggedOnUser
. ImpersonateLoggedOnUser
nécessite un handle de jeton. Il existe plusieurs façons d'obtenir un descripteur de jeton:
LogonUser
. Cela nécessite cependant que vous connaissiez le mot de passe utilisateur.CreateRestrictedToken
, DuplicateToken
, ou DuplicateTokenEx
.OpenProcessToken
ou OpenThreadToken
Pour la partie de stockage de mot de passe, vous voudrez peut-être jeter un œil à cette question posée récemment.
C'était ma réponse:
Vous pouvez/devez utiliser le DPAPI , le Data Protection API qui fournit le chiffrement du stockage.
Il est là juste pour ce type de problème.
Le chiffrement du stockage est basé sur:
Il y a émission dnrTV avec Karl Franklin montrant exactement ce qui est nécessaire pour l'implémenter, ainsi que d'autres fonctions de cryptage.
Le code source de l'émission est également disponible sur la page.
Il y a, bien sûr, beaucoup de autres articles à ce sujet.