Active Directory のユーザー名とパスワードがあり、C# を使用して Active Directory にログインしたいと考えています。Windowsフォームでこれを行うにはどうすればよいですか?
4 に答える
この質問は数年前のものです。この回答が将来人々に役立つことを願っています。これは私のために働いています:
次の参照を追加します。
- System.DirectoryServices を使用します。
- System.DirectoryServices.AccountManagement を使用して;
その後、アプリで次のコードを使用できます。
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOUR DOMAIN");
bool Valid = pc.ValidateCredentials("User", "password");
Validと呼ばれる変数は、logIn が OK の場合にTrue値を表示します。
詳細については、このページにアクセスしてください。このページはstackOverFlowからのもので、 「MS Active Directory でログイン」に関する多くの情報が表示されます。
どうぞ。このメソッドはActiveDirectoryusername/password
に対して検証され、かなり前から関数のツールボックスの一部でした。
//NOTE: This can be made static with no modifications
public bool ActiveDirectoryAuthenticate(string username, string password)
{
bool result = false;
using (DirectoryEntry _entry = new DirectoryEntry())
{
_entry.Username = username;
_entry.Password = password;
DirectorySearcher _searcher = new DirectorySearcher(_entry);
_searcher.Filter = "(objectclass=user)";
try
{
SearchResult _sr = _searcher.FindOne();
string _name = _sr.Properties["displayname"][0].ToString();
result = true;
}
catch
{ /* Error handling omitted to keep code short: remember to handle exceptions !*/ }
}
return result; //true = user authenticated!
}
これを実行するソフトウェアは、明らかにドメイン内のコンピューターで実行する必要があります(または、資格情報を認証するActive Directoryがない場合)。
解決
Active Directory への接続は非常に簡単です。
DirectoryEntry
(ネームスペース内の) オブジェクトを使用する必要がありますSystem.DirectoryServices
。
このオブジェクトのコンストラクターは、パラメーターで 3 つの文字列を受け取ります。
- Active Directory へのパス。このパスの形式は次のとおりです。
LDAP://your-name-AD
- 接続のユーザー名
- 対応するパスワード
例
using System.DirectoryServices;
try
{
DirectoryEntry Ldap = new DirectoryEntry("LDAP://your-name-AD", "Login", "Password");
}
catch(Exception Ex)
{
Console.WriteLine(Ex.Message);
}
より短い答えは、参照 System.DirectoryServices.AccountManagementを追加することです
次に、 UserPrincipal.Current.Context.ValidateCredentials("username", "password"); を使用します。
ただし、検証するドメインに参加する必要があると思います。