Laden...

Windows Authentifizierung speichern

Erstellt von schumischumi vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.379 Views
S
schumischumi Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren
Windows Authentifizierung speichern

Hallo zusammen,

folgende Situation:

ich möchte ein Programm schreiben, das auf einem Server als Dienst läuft und per wmi, snmp usw. eine dauerhafte Inventarisierung durchführt. Mein Problem ist, dass ich mich an dern Clients authentifizieren muss und dass es evtl mehrere unterschiedliche Accounts gibt mit denen ich mich an den verschiedenen clients authentifizieren muss. sprich an client A gehe ich mit user X und an client B mit user Y. Daher fällt die möglichkeit weg, einfach den Dienst unter dem domänen Admin laufen zu lassen.

Nun die Frage: Wie kann ich in meinem Programm mehrere (Windows) Accounts hinterlegen ohne das sie jeder X-Beliebige Serveradmin auslesen kann.

Ich komme von der Webschiene und bin es daher gewohnt, dass es so abläuft: user gibt pw ein -> hash -> vergleich mit hash in DB. Macht natürlich bei einer Windows Authentifizierung keinen Sinn, da ich den User nicht bei jedem Discovery Run (zb alle 5min) die Credentials eingeben lassen kann.

Beispiel Software die es auch irgendwie schafft ist Spiceworks

Hab mir auch schon die FAQ durchgelesen und google bemüht, leider ohne erfolg.

thx für eure zeit

G
538 Beiträge seit 2008
vor 12 Jahren

Du hast zwei (drei) Möglichkeiten:

Entweder du schaffst einen Accout mit allen nötigen Rechten für alle Dienste und nutzt diesen dann (das ist durchaus sauber)

oder

Du nutzt "constrained Delegation" und machst einen S4ULogon ohne Passwort.
Dazu muss du in der Domäne die Delegation vom Server auf dem das Programm läuft zu den Zielsystemen erlauben - inklusive "Protocoll Transition" - die MSDN weiß da ganz viel mehr darüber.
In dem Fall kannst du dich einfach per UPN als anderer Benutzer ausgeben.

oder

Du startest dein Programm mit verschiedenen Startparametern in verschiedenen Benutzerkontexten - denn bei nem geplanten Task (beispielsweise) kannst du ja auch einfach einen ausführenden Benutzer angeben. Dann kann dein Programm zwar nur eine Quelle gleichzeitig verarbeiten, aber vielleicht reicht das ja.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
schumischumi Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren

Hi, danke für die schnelle antwort.

möglichkeit 1 scheidet aus, da ich evtl auf verschiedene Domänen zugreife und daher meherer User benötige

möglichkeit 2 & 3
scheiden beide aus, da ich evtl. auf maschinen zugreifen will, bei denen kein win-user rechter hat (sry kam evtl in der frage nicht so raus.). deshalb ist es nötig, allg. passwörter und usernames zu speichern und nicht nur für windows.

was ich mir überlegt hätte:

  1. ich lege einen extra domänenuser an
  2. ich erstelle mit c# eine datei die ich so verschlüssele, dass nur der zuerst erstellte benutzer zugriff hat. sprich eine verschlüsselung auf basis der windowsanmeldung. in diese datei würde ich dann die passwörter schreiben lassen.

ist sowas (mit csharp) möglich?

G
538 Beiträge seit 2008
vor 12 Jahren

Also Passwörter speichern ist selten eine gute Idee..
Wenn du es für unumgänglich hälst - dann schau dir eventuell mal die DataProtectionAPI an - die gibt's in Windows.

Wenn kein Windows-User zugriff hat auf ne Maschine - wer eigentlich dann?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

16.842 Beiträge seit 2008
vor 12 Jahren

Bei Konkurrenzprodukten wird das so gehandhabt, dass lokal ein Dienst läuft, der auf der Maschine alles ausliest; zB der "Discovery Agent" vom SCCM.
Ein weiterer zentraler Dienst auf dem Management Server kontaktiert die lokalen Dienste, die ihm dann mitteilen, was auf der jeweiligen Kiste ist.

Externe Monitoring-Lösungen haben meiner Erfahrung nach immer durch einen User die speziellen Rechte bzw. sind in einer entsprechenenden Domänen-Gruppe. Der Dienst selbst nutzt dann Impersonate(). Spontan fällt mir da Whatsup Gold ein.