Announcement

Collapse
No announcement yet.

WindowsIdentity C#

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WindowsIdentity C#

    Gute Morgen,
    ich hoffe mir kann jemand helfen...

    Versuche seit über einer Woche das ActiveDirectory zu händeln, aber es läuft nicht so wie ich will.
    Ich weiß das, das .NET Framework mir dafür ein paar Klassen bietet aber, so richtig durchsteigen tu ich nicht. habe jetzt zwei Bücher
    - C# Schritt für Schritt
    - Das Codeboke C#
    Bitte nicht darüber lachen...

    Wie gehe ich vor?
    ich binde using Windows ein....
    erstelle mir ein Object...
    greife darauf zu...
    lese meinen Benutzernamen aus, und bekomme den Server Name mit meinen Benutzernamen... soweit so gut. klappt auch.
    Jetzt will ich auf die Benutzergruppe zugreifen und alle darin befindlichen user auslesen.... (bricht mir das Genick)
    Wie geht das??
    Desweiteren frage ich mich wie ich die Domain und die Adresse des Servers im Programm angeben muss.
    Weil ein benutzer kann ja auch local angemeldet sein, oder denke ich hier falsch?
    Ich wäre wirklich dankbar, wenn mir jemand helfen würde!

    Danke

    Andy

  • #2
    Hallo,

    wichtiger als die konkrete Implementierung ist zuerst die Fage, welche Benutzer (Administrator, Hauptbenutzer oder normale Benutzer) zu welchem Zweck auf das Active Directory zugreifen sollen. In einer typischen Anwendung wird das Active Directory zur Identifizierung des Anwenders verwendet, so dass vor allem 3 Fragen wichtig sind:

    1. Hat sich der Benutzer überhaupt im Active Directory angemeldet?
    2. Welchen Benutzernamen (Domänenname\Benutzername) hat er?
    3. Gehört er einer bestimmten Rolle (Benutzergruppe) an?

    Für diese typischen Aufgaben stellt das .NET Framework seit der Version 1.0 bequeme Klassen/Methoden bereit.

    1. WindowsIdentity-Methode IsAuthenticated
    2. WindowsIdentity-Eigenschaft Name
    3. WindowsPrincipal-Methode IsInRole

    Wenn die eigene Anwendung allerdings das Active Directory administrieren soll (wozu der Anwender zur Gruppe der AD-Administratoren gehören muss), wird es aufwändiger.

    Jetzt will ich auf die Benutzergruppe zugreifen und alle darin befindlichen user auslesen...
    Warum? Reicht die "Ja/Nein"-Antwort auf die Frage "Gehört der Benutzer A zur Gruppe B" nicht aus? Wenn nicht, kann ich ein Beispiel nachreichen (wenn der Benutzer die dafür benötigten Rechte am AD hat).

    Weil ein benutzer kann ja auch local angemeldet sein, oder denke ich hier falsch?
    Nein, das ist völlig richtig. Unter Windows sind Benutzer und Computer Sicherheitshauptnamen (securitry principal). Hauptnamen können sich untereinander über den Prozess der Authentifizieren identifizieren. Diese Authentifizierung wird von einer Autorität durchgeführt. Jede Autorität besitzt eine Kontodatenbank mit den sicherheitsbezogenen Konfigurationsdaten - wobei Windows für ein neues Konto eine neue Sicherheits-ID (SID) vergibt. Es zwei verschiedene Autorität-Typen:

    1. Lokale Autorität (jeder Windows-Rechner)
    2. Domänenautorität (Domänenkontroller alias Active Directory)

    Ein Benutzer, dessen Rechner im AD intregriert ist, kann sich entweder lokal am Rechner anmelden oder im AD. Aus diesem Grund wird der Benutzername ja auch in der Syntax Autorität\Hauptname (oder aktueller im AD-Format hauptname@autorität) dargestellt. Die Anwendung kann somit sehr wohl unterscheiden, welchen Login-Weg der Anwender genutzt hat.
    Zuletzt editiert von Andreas Kosch; 05.02.2007, 14:10.

    Comment


    • #3
      Vielen Dank für die Detalierten Aussagen!

      Warum? Reicht die "Ja/Nein"-Antwort auf die Frage "Gehört der Benutzer A zur Gruppe B" nicht aus?
      Das Problem ist das die Software auf einem Cient Rechner läuft und des morgens der Rechner hochgefahren wird, sodass jeder auf das System zugreift. Ich kann in diesem fall keine


      1. WindowsIdentity-Methode IsAuthenticated
      nutzen....

      Der jeweilige Benutzer soll sich in einer ComboBox auswählen, wo alle aus der Gruppe Users aufgelistet sind. (Problem sind wahrscheinlich die Rechte??)
      Erst jetzt wird er nach einem Passwort gefragt, welches dann verglichen wird.
      Ich weiss es ist eine schlechte Lösung, es wird aber so gewünscht

      Und für diesen fall muss ich die gruppe auslesen... und das krieg ich nicht geregelt....

      Also wenn du ein beispiel hast wäre ich wirklich dankbar, wenn ich daraus einiges ableiten könnte...

      Danke für Deine bisherige Hilfe

      Gruß Andy

      Comment


      • #4
        Hallo,

        Und für diesen fall muss ich die gruppe auslesen...
        das folgende Beispiel demonstriert das Auslesen der Benutzer:

        a) Alle Benutzer des Active Directory
        b) Nur die Benutzer einer speziellen Gruppe des Active Directory

        Das Beispiel greift auf das AD zu, an dem sich der Benutzer beim Windows-Login angemeldet hat.

        <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">using</span> System;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Collections.Generic;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.ComponentModel;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Data;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Drawing;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Text;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Windows.Forms;</p><p style="margin: 0px;"><span style="color: green;">// vorher Verweis zu System.DirectoryServices hinzuf&#252;gen</span></p><p style="margin: 0px;"><span style="color: blue;">using</span> System.DirectoryServices;</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">namespace</span> FORUM_BenutzerInGruppe</p><p style="margin: 0px;">{</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Form1</span> : <span style="color: #2b91af;">Form</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> Form1()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; InitializeComponent();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> buttonAllUser_Click(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Alle Benutzer des Active Directory auflisten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">string</span> sUserName;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #2b91af;">DirectoryEntry</span> aDE = <span style="color: blue;">new</span> <span style="color: #2b91af;">DirectoryEntry</span>(<span style="color: #a31515;">""</span>);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #2b91af;">DirectorySearcher</span> aDS = <span style="color: blue;">new</span> <span style="color: #2b91af;">DirectorySearcher</span>(aDE);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDS.Filter = <span style="color: #a31515;">"(objectCategory=user)"</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (<span style="color: #2b91af;">SearchResult</span> aSR <span style="color: blue;">in</span> aDS.FindAll())</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sUserName = aSR.GetDirectoryEntry().Name;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sUserName = sUserName.Remove(0, 3); <span style="color: green;">// Pr&#228;fix "CN=" entfernen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; listBox1.Items.Add(sUserName);</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; toolStripStatusLabel1.Text = <span style="color: #a31515;">"Fertig."</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> buttonGroupUser_Click(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// nur die Benutzer einer bestimmten Benutzergruppe auflisten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #2b91af;">DirectoryEntry</span> aDE = <span style="color: blue;">new</span> <span style="color: #2b91af;">DirectoryEntry</span>(<span style="color: #a31515;">""</span>);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #2b91af;">DirectorySearcher</span> aDS = <span style="color: blue;">new</span> <span style="color: #2b91af;">DirectorySearcher</span>(aDE);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDS.Filter = <span style="color: #a31515;">"(&amp;(objectClass=group)(cn="</span> + textBoxGroupName.Text + <span style="color: #a31515;">"))"</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (<span style="color: #2b91af;">SearchResult</span> aSR <span style="color: blue;">in</span> aDS.FindAll())</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (<span style="color: #2b91af;">Object</span> aMember <span style="color: blue;">in</span> aSR.Properties[<span style="color: #a31515;">"member"</span>])</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #2b91af;">DirectoryEntry</span> aMemberEntry = <span style="color: blue;">new</span> <span style="color: #2b91af;">DirectoryEntry</span>(<span style="color: #a31515;">"LDAP://"</span> + aMember);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">object</span> obVal = aMemberEntry.Properties[<span style="color: #a31515;">"sAMAccountName"</span>].Value;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (<span style="color: blue;">null</span> != obVal)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; listBox1.Items.Add(obVal.ToString());</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; toolStripStatusLabel1.Text = <span style="color: #a31515;">"Fertig."</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">}</p></div>

        Comment


        • #5
          Danke

          Ich danke Dir für die schnelle Hilfe.
          Damit kann ich was anfangen.

          Also nochmals danke

          Gruß Andy

          Comment

          Working...
          X