2014-10-24

[ASP.NET] 讀取 AD (Active Directory) 資訊

AD(Active Directory)是用來存放所有系統使用人的帳號和密碼的地方,目的為方便各系統使用人能使用單一帳密進去所有的系統(包含 Windows 登入),也就是單一認證。

AD Server 通常都有一套很方便的管理工具,所以需要透過撰寫程式去控制 AD 資訊的時機實在不多,但為了避免日後有需,在此特意記錄一下方法。

// 要載入的元件
using System.DirectoryServices;

...

// AD資訊
string account = "adminAccount";
string password = "123456";
string domain = "OU=台灣總公司,DC=tim,DC=com,DC=tw";
string QueryString = "LDAP://192.168.192.1/" + domain;

// Create DirectoryEntry
DirectoryEntry de = new DirectoryEntry(QueryString, account, password);

// Create DirectorySearcher
DirectorySearcher ds = new DirectorySearcher(de);

try
{
 // 查詢條件,如果有需要的話。下面這行是查詢單一帳號的範例。
 //ds.Filter = "(SAMAccountName=accountA)";

 // 定義需要的 AD 欄位,這裡只取出 displayName 和 SAMAccountName 這兩個欄位。
 ds.PropertiesToLoad.Add("displayName");
 ds.PropertiesToLoad.Add("SAMAccountName"); // 也就是 Account
 //ds.PropertiesToLoad.Add("Name"); // full name
 //ds.PropertiesToLoad.Add("mail");
 //ds.PropertiesToLoad.Add("description");
 //ds.PropertiesToLoad.Add("phsicalDeliveryOfficeName");
 //ds.PropertiesToLoad.Add("userPrincipalName"); //user logon name
 //ds.PropertiesToLoad.Add("telephoneNumber");
 //ds.PropertiesToLoad.Add("givenName"); // first name

 //找全部的 AD 資訊出來
 SearchResultCollection sr = ds.FindAll();

 if (sr != null)
 {
  // 迴圈列出 AD 資訊
  foreach (SearchResult subSr in sr)
  {
   if (subSr.Properties["SAMAccountName"].Count != 0 && subSr.Properties["displayName"].Count != 0)
   {
      Response.Write("SAMAccountName = " + subSr.Properties["SAMAccountName"][0] + "\r\n");
      Response.Write("displayName = " + subSr.Properties["displayName"][0] + "\r\n");
      Response.Write("----------------------------\r\n");
   }
  }
 }
 else
 {
    Response.Write("User not found");
 }
}
catch (Exception ex)
{
   Response.Write(ex.Message);
}
finally
{
   ds.Dispose();
   de.Dispose();
}

此範例最後會印出的資訊如下:
SAMAccountName = accountA
displayName = nameA
----------------------------
SAMAccountName = accountB
displayName = nameB
----------------------------
SAMAccountName = accountC
displayName = nameC
----------------------------


沒有留言:

張貼留言