2010年8月14日 星期六

使用c#讓登入使用者進行Active Directory 網域身分認證

本文介紹如何用c#程式對Active Directory網域進行身分認證。
首先我們先取得AD認證server的資訊,我們將這資訊寫在Web.Config的<appSettings>內。

//web.config
<appSettings>
    <!--AD Server Information-->
    <add key="ADServer" value="192.168.31.48:389"/>


在程式開頭,需引用System.DirectoryServices這個類別。

using System;
using System.Configuration;
using System.DirectoryServices;

接著,我們寫一個方法來承接使用者登入時輸入的帳號與密碼,首先我們取得web.config中的AD 認證server資訊,然後建立一個DirectoryEntry的物件,將AD 認證server資訊+user帳號+user密碼帶入,再來設定search.Filter搜尋條件為cn=user帳號,然後使用search.FindOne()去找尋這個使用者,若search.FindOne()找到但密碼錯誤,則會回應null出來;反之,表示我們找到也對這個登入者認證成功。

private bool IsValidationForAD(string Username, string Password)
{
    string LoginAD =ConfigurationSettings.AppSettings["ADServer"];
    DirectoryEntry entry =
        new DirectoryEntry("LDAP://" + LoginAD, Username, Password);
    object obj = entry.NativeObject;
    DirectorySearcher search = new DirectorySearcher(entry);
    search.Filter = "(&(cn=" + Username + "))";
    SearchResult result = search.FindOne();
    if (result!=null)
    {
        return true;//verify password is succeed!
    }
    else
    {
        return false;//User ID or Password Error!!
    }
}

4 則留言: