9 Stimmen

Wie verwendet man die Windows-Authentifizierung in einer Windows-Anwendung?

Wie verwendet man die Windows-Authentifizierung (lokaler Rechner-Administrator-Benutzer) in einer in C# geschriebenen Windows-Anwendung?

Benötigt wird, wenn Benutzer meine Windows-Anwendung GUI öffnet, sollte es lokale Administrator-Anmeldeinformationen authentifizieren, auch wenn Benutzer als Administrator dort angemeldet ist.

Ist dies eine Windows-Imitation?

8voto

SLaks Punkte 832502

Sie können die LogonUser API-Methode zur Überprüfung eines Benutzernamens und eines Passworts.
Sie können die [DllImport] aquí .

Wenn Sie eine Standard-Eingabeaufforderung für den Benutzernamen und das Kennwort anzeigen möchten, können Sie den Befehl CredUIPromptForCredentials API-Funktion; siehe auch aquí

EDIT

Um zu prüfen, ob der Benutzer ein Administrator ist, können Sie CheckTokenMembership und prüfen, ob der Benutzer in der Administrators Gruppe.

Alternativ können Sie auch anrufen NetUserGetInfo Ebene 1 und prüfen Sie, ob usri1_priv es USER_PRIV_ADMIN .

Sie können auch WMI oder DirectoryServices verwenden.

5voto

Ali Punkte 3215

Es mag ein bisschen spät sein, aber zu erreichen Fenster-Authentifizierungsfunktionalität zu einer C#-Desktop-Anwendung zu machen, gibt es zwei Schritte, die mit den folgenden Schritten durchgeführt werden.

Schritt 1: Abrufen von Details zum aktuell angemeldeten Benutzer:

Dies ist ziemlich einfach. Wir können dies erreichen, indem wir die WindowsIdentity-Klasse von System.Security.Principal Namensraum. Diese Klasse bietet eine statische Methode, getCurrent() die ein Objekt von WindowsIdentity zurückgeben. Im Folgenden finden Sie den Code, den Sie verwenden können, um die aktuellen Anmeldedaten des Benutzers zu erhalten.

Schritt 2: Überprüfung der vom Benutzer angegebenen Windows-Anmeldeinformationen:

Sie müssen den Domänennamen, den Benutzernamen und das Passwort vom Benutzer abfragen, um diese Werte an den Interop-Dienst weiterzugeben. Dies ist im Vergleich zu oben etwas komplexer, da wir eine Windows-API mit IntropServices aufrufen müssen. Um dies zu erreichen, müssen wir eine externe Funktionsdeklaration hinzufügen und dann die Funktion aufrufen. Der folgende Code wird Ihnen helfen, dies besser zu verstehen.

bool issuccess = false;
string username = GetloggedinUserName();
if (username.ToLowerInvariant().Contains(txtUserName.Text.Trim().ToLowerInvariant()) && username.ToLowerInvariant().Contains(txtDomain.Text.Trim().ToLowerInvariant()))
    {
        issuccess = IsValidateCredentials(txtUserName.Text.Trim(), txtPwd.Text.Trim(), txtDomain.Text.Trim());
    }

if (issuccess)
    MessageBox.Show("Successfuly Login !!!");
else
    MessageBox.Show("User Name / Password / Domain is invalid !!!");

3voto

Brian R. Bondy Punkte 325712

Wenn Sie Ihre Manifestdatei so einstellen, dass sie als Administrator ausgeführt wird, werden Sie immer nach einem Administrator-Benutzernamen und -Passwort gefragt, wenn Ihre Benutzer als Standardkonto ausgeführt werden.

Was Sie aber wahrscheinlich suchen, ist die LogonUser Win32-API zur Validierung der Authentifizierungsdaten:

[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(
    string lpszUsername, 
    string lpszDomain, 
    string lpszPassword, 
    int dwLogonType, 
    int dwLogonProvider, 
    out IntPtr phToken
    );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X