Benutzerauthentifizierung gegen Active Directory in C#
-
Verwenden Sie den Namensraum
System.DirectoryServices.AccountManagement
, um einen Benutzer gegen Active Directory inC#
zu validieren -
Verwenden Sie den Namespace
System.DirectoryServices
, um einen Benutzer anhand von Active Directory inC#
zu validieren -
Verwenden Sie den Namespace
System.DirectoryServices.Protocols
, um einen Benutzer anhand von Active Directory inC#
zu validieren -
Verwenden Sie die Methode
ActiveDirectoryMembershipProvider.ValidateUser(String, String)
, um einen Benutzer gegen AD inC#
zu validieren
Die Kontoauthentifizierung gegenüber Active Directory ist möglich, indem die Anmeldeinformationen anhand der angegebenen Benutzerinformationen validiert und das Ergebnis an die Aufrufmethode zurückgegeben werden. In diesem Tutorial lernen Sie vier Möglichkeiten zum Authentifizieren oder Validieren eines Benutzers anhand von Active Directory in C# kennen.
Verwenden Sie den Namensraum System.DirectoryServices.AccountManagement
, um einen Benutzer gegen Active Directory in C#
zu validieren
Eine der einfachsten Methoden, wenn Sie mit .NET 3.5
oder neueren Versionen arbeiten, die Benutzeranmeldeinformationen überprüfen oder validieren können. Die Hauptziele dieses Namensraums bestehen darin, grundlegende Verwaltungsoperationen zu vereinfachen und unabhängig vom zugrunde liegenden Verzeichnis konsistent zu machen und zuverlässige Ergebnisse für diese Operationen bereitzustellen.
Im Allgemeinen müssen C#-Entwickler, die verzeichnisbasierte Anwendungen erstellen, häufig die Anmeldeinformationen von Benutzern authentifizieren, die im Active Directory gespeichert sind, und sie erfüllen diese Aufgabe mit der Klasse DirectoryEntry
, um eine LDAP-Bind-Operation im Hintergrund zu erzwingen.
Da es sehr einfach ist, schlechten C#-Code zu schreiben, der nicht sicher ist, müssen Entwickler darauf achten, hochsicheren Code zu schreiben. Es ermöglicht Ihnen, die inhärenten Einschränkungen in Active Directory zu überwinden, jedoch auf Kosten des Schreibens von komplizierterem C#-Code.
Beispielcode:
using System;
using System.Windows.Forms;
using System.DirectoryServices.AccountManagement;
namespace activeDirectoryAuthentication {
public partial class Form1 : Form {
string username, password;
public Form1() {
InitializeComponent();
}
// insert username in textfield by user
private void textBox1_TextChanged(object sender, EventArgs e) {
username = textBox1.Text;
}
// insert password in textfield by user
private void textBox2_TextChanged(object sender, EventArgs e) {
password = textBox2.Text;
}
// click event after the user clicks `Login`
private void button1_Click(object sender, EventArgs e) {
try {
// create a connection to domain, no need to add or mention LDAP:// in domain
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "yourdomain.com")) {
// validate the credentials
bool isValid = pc.ValidateCredentials(username, password);
if (isValid) {
// User credentials validated
} else {
// Not authenticated
}
}
} catch (Exception ex) {
// throw an exception when a connection to the domain is unsuccessful
}
}
}
}
Verwenden Sie den Namespace System.DirectoryServices
, um einen Benutzer anhand von Active Directory in C#
zu validieren
Es bietet einfachen Zugriff auf Active Directory-Domänendienste und enthält zwei primäre Komponentenklassen, DirectorySearcher
und DirectoryEntry
, um die Active Directory Services Interfaces-Technologie zu verwenden. Es validiert Benutzer einfach anhand des Active Directory, indem es Ressourcen in einem Netzwerk unabhängig von ihrer Größe lokalisiert und verwaltet.
Es ermöglicht Ihren Anwendungen, eine einzige Schnittstelle zu verwenden, um mit verschiedenen Richtungen im Internet zu interagieren. Es verwendet eine Baumstruktur, in der jeder Knoten einen Satz von Eigenschaften darstellt, und Sie können damit den Baum durchsuchen, durchlaufen und bearbeiten sowie die Eigenschaften eines Knotens lesen/schreiben.
Die Klasse DirectoryEntry
kapselt einen Knoten in der Hierarchie der AD-Domänendienste und kann Objekte binden, Eigenschaften lesen und Attribute oder Benutzerkonten aktualisieren. Verwenden Sie die Klasse DirectorySearcher
, um Abfragen für das Active Directory durchzuführen, um Benutzer zu validieren und zu authentifizieren.
Beispielcode:
using System;
using System.Windows.Forms;
using System.DirectoryServices;
namespace activeDirectoryAuthentication {
public partial class Form1 : Form {
string username, password;
public Form1() {
InitializeComponent();
}
// insert username in textfield by user
private void textBox1_TextChanged(object sender, EventArgs e) {
username = textBox1.Text;
}
// insert password in textfield by user
private void textBox2_TextChanged(object sender, EventArgs e) {
password = textBox2.Text;
}
// click event after the user clicks `Login`
private void button1_Click(object sender, EventArgs e) {
IsValidUser(username, password);
}
private bool IsValidUser(string username, string password) {
bool isValid = false;
try {
DirectoryEntry entry = new DirectoryEntry("LDAP://yourdomain.com", username, password);
object nativeObj = entry.NativeObject;
isValid = true;
} catch (DirectoryServicesCOMException comex) {
// Not Authenticated. comex.Message will return the reason
} catch (Exception ex) {
// optional
}
return isValid;
}
}
}
Verwenden Sie den Namespace System.DirectoryServices.Protocols
, um einen Benutzer anhand von Active Directory in C#
zu validieren
Im Gegensatz zu anderen Methoden zur Überprüfung eines Benutzers anhand von Active Directory kann es zwischen einem Kennwort, das geändert werden muss, und einem Benutzer mit einem falschen Kennwort unterscheiden. Es werden Ausnahmen angezeigt, wenn das Benutzerkennwort geändert werden muss oder nicht vorhanden ist.
Es verwendet die lexc.ServerErrorMessage
, um Ausnahmen auszulösen, deren Datenwert eine Hex-Darstellung des Win32 Error
-Codes ist. Die in lexc.ServerErrorMessage
enthaltenen Fehlercodes sind die gleichen, die ansonsten durch Aufrufen des Win32-LogonUser-API-Aufrufs zurückgegeben würden.
Der Namespace System.DirectoryServices.Protocols
in C# stellt die Methoden bereit, die in den Standards LDAP Version 3 und DSML Version 2.0 definiert sind. Mit Hilfe der Klasse LdapConnection
baut es eine TCP/IP- oder UDP-LDAP-Verbindung zu Active Directory auf, um einen Benutzer zu authentifizieren.
Beispielcode:
using System;
using System.Net;
using System.Windows.Forms;
using System.DirectoryServices.Protocols;
namespace activeDirectoryAuthentication {
public partial class Form1 : Form {
string username, password;
public Form1() {
InitializeComponent();
}
// insert username in textfield by user
private void textBox1_TextChanged(object sender, EventArgs e) {
username = textBox1.Text;
}
// insert password in textfield by user
private void textBox2_TextChanged(object sender, EventArgs e) {
password = textBox2.Text;
}
// click event after the user clicks `Login`
private void button1_Click(object sender, EventArgs e) {
try {
LdapConnection adDatabaseCon = new LdapConnection("LDAP://enteryourdomainaddress.com");
NetworkCredential credential = new NetworkCredential(username, password);
adDatabaseCon.Credential = credential;
adDatabaseCon.Bind();
MessageBox.Show("You are logged in successfully!");
} catch (LdapException lexc) {
String error = lexc.ServerErrorMessage;
// MessageBox.Show(lexc);
} catch (Exception exc) {
// MessageBox.Show(exc);
}
}
}
}
Verwenden Sie die Methode ActiveDirectoryMembershipProvider.ValidateUser(String, String)
, um einen Benutzer gegen AD in C#
zu validieren
Es gehört zum Namensraum System.Web.Security
und dient hauptsächlich dazu, den angegebenen Benutzernamen und das Kennwort im Active Directory zu überprüfen oder zu validieren. Es verfügt über zwei Parameter, der erste ist die Zeichenfolge Benutzername
und der andere ist die Zeichenfolge Passwort
, die das Kennwort für den angegebenen Benutzer darstellt.
Diese Methode gibt einen booleschen Wert als true
oder false
zurück. Das true
stellt einen gültigen Benutzer dar und die Methode ValidateUser(String, String)
gibt false
zurück, wenn der Benutzer nicht im Active Directory existiert.
Die Klasse Membership
ruft diese Methode auf, um Benutzeranmeldeinformationen gegen AD zu validieren, und wenn sie false
zurückgibt, selbst wenn die richtigen Anmeldeinformationen angegeben werden, werden auch die Gründe verdeutlicht. Bei der Validierung eines Benutzers validiert der Anbieter die Anmeldeinformationen, indem er eine Verbindung zum Active Directory unter Verwendung des angegebenen Benutzernamens und Kennworts herstellt, nicht der in der Konfigurationsdatei der Anwendung konfigurierten Anmeldeinformationen.
Die Instanz ActiveDirectoryMembershipProvider
stellt jedoch unter Verwendung der konfigurierten Anmeldeinformationen eine Verbindung zum Verzeichnis her, um zu bestätigen, dass ein Benutzer im Suchbereich vorhanden ist, und um zu überprüfen, ob die Eigenschaft EnablePasswordReset
auf true
gesetzt ist, und verwendet die konfigurierten Anmeldeinformationen zum Laden der Benutzerinstanz.
Beispielcode:
using System;
using System.Windows.Forms;
using System.Web.Security; // moved in System.Web.ApplicationServices
namespace activeDirectoryAuthentication {
public partial class Form1 : Form {
string username, password;
bool publicC;
public Form1() {
InitializeComponent();
}
// insert username in textfield by user
private void textBox1_TextChanged(object sender, EventArgs e) {
username = textBox1.Text;
}
// insert password in textfield by user
private void textBox2_TextChanged(object sender, EventArgs e) {
password = textBox2.Text;
}
// to check if the account is a public account or an admin account
private void radioButton1_CheckedChanged(object sender, EventArgs e) {
publicC = radioButton1.Checked;
}
// click event after the user clicks `Login`
private void button1_Click(object sender, EventArgs e) {
// use `ActiveDirectoryMembershipProvider` as the default membership provider
var adok = Membership.Provider.ValidateUser(username, password);
if (Membership.ValidateUser(username, password)) {
FormsAuthentication.RedirectFromLoginPage(username, publicC);
} else
MessageBox.Show("Login failed. Please check your user name and password and try again.");
}
}
}
Die Active Directory-Authentifizierung vereinfacht die Anmeldung für Benutzer und reduziert das Risiko von Angriffen durch Maximierung der Sicherheit. Mithilfe von Active Directory können Sie ein Konto sofort validieren, indem Sie die aktualisierten Anmeldeinformationen des Benutzers mit lokalen Geräten und C#-Anwendungen verwenden.
Active Directory von Microsoft ist ein kritischer Bestandteil der IT-Infrastruktur und kann ohne einen angemessenen Zugriffsansatz die gesamte IT-Umgebung gefährden. In diesem Tutorial haben Sie die optimierten Methoden zum Validieren oder Authentifizieren eines Benutzers/Kontos für Active Directory in C# kennengelernt.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub