Làm việc với Active Directory - Lập trình Active Directory - Phần 2

Username

Nếu 1 người dùng khác với người dùng đương thời muốn truy xuất vào thư

mục , một sự uỷ nhiệm người dùng phải được đặc tả trong tiến trình liên

kết.với Active Directory ta có 1 số cách để thiết lập username.

Downlevel Logon

Với downlevel logon username có thể được đặc tả với tên domain window

2000 :

domain\username

Distinguished Name (Tên phân biệt )

Người dùng có thể được đặc tả bởi tên phân biệt của đối tượng người

dùng,ví dụ :

CN=Administrator, CN=Users, DC=eichkogelstrasse, DC=local

User Principal Name ( UPN)

pdf11 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 2366 | Lượt tải: 2download
Tóm tắt nội dung Làm việc với Active Directory - Lập trình Active Directory - Phần 2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Làm việc với Active Directory 
Lập trình Active Directory – Phần 2 
Username 
Nếu 1 người dùng khác với người dùng đương thời muốn truy xuất vào thư 
mục , một sự uỷ nhiệm người dùng phải được đặc tả trong tiến trình liên 
kết.với Active Directory ta có 1 số cách để thiết lập username. 
Downlevel Logon 
Với downlevel logon username có thể được đặc tả với tên domain window 
2000 : 
domain\username 
Distinguished Name (Tên phân biệt ) 
Người dùng có thể được đặc tả bởi tên phân biệt của đối tượng người 
dùng,ví dụ : 
CN=Administrator, CN=Users, DC=eichkogelstrasse, DC=local 
User Principal Name ( UPN) 
UPN của 1 đối tượng được định nghĩa với thuộc tính userPrincipalName.nhà 
quản trị hệ thống đặc tả cái này với thông tin đăng nhập trong Accounttab 
của thuộc tính User với những người dùng Active Directory và công cụ máy 
tính. lưu ý rằng đây không phải là địa chỉ email của người dùng. 
Thông tin này cũng xác định duy nhất người dùng , và có thể được dùng để 
đăng nhập : 
Nagel@eichkogelstrasse.local 
Liên kiết với lớp DirectoryEntry 
Lớp System.DirectoryServices.DirectoryEntry có thể được dùng để đặc tất 
cả thông tin liên kết. ta có thể dùng hàm dựng mặc định và định nghĩa thông 
tin liên kết với thuộc tính Path, Username ,Password và AuthenticationType, 
hoặc truyền tất cả thông tin trong hàm dựng : 
DirectoryEntry de = new DirectoryEntry(); 
de.Path = "LDAP://celticrain/DC=eichkogelstrasse, DC=local"; 
de.Username = "nagel@eichkogelstrasse.local"; 
de.Password = "someSecret"; 
// dùng sự uỷ nhiệm người dùng đương thời 
DirectoryEntry de2 = new DirectoryEntry( 
"LDAP://DC=eichkogelstrasse, DC=local"); 
Thậm chí nếu đối tượng DirectoryEntry xây dựng thành công chưa chắc việc 
liên kết đã thành công . liên kết sẽ xảy ra lần đầu khi 1 thuộc tính được đọc 
để tránh việc lưu thông trên mạng không cần thiết.vào lần truy xuất đầu tiên 
của đối tượng, nó có thể được thấy nếu đối tượng tồn tại,và nếu sự uỷ nhiệm 
người dùng được đặc tả đúng 
Lấy các mục thư mục 
Trong phần này ta sẽ biết cách đặc tả các thuộc tính liên kết đến 1 đối tượng 
trong Active Directory, ta hãy đọc các thuộc tính của 1 đối tượng 
Các thuộc tính của các đối tượng người dùng 
Lớp DirectoryEntry có 1 vài thuộc tính để lấy thông tin về đối tượng:các 
thuộc tính Name ,Guid,và SchemaClassName .lần đầu ta truy xuất vào 1 
thuộc tính của đối tượng DirectoryEntry ,liên kết xuất hiện và cache của đối 
tượng ADSI bên dưới được điền .khi ta truy xuất các thuộc tính khác , ta chỉ 
đang đọc chúng từ cache ,do đó giao tiếp với server không cần thiết cho dữ 
liệu từ cùng đối tượng. 
Trong ví dụ ta đang truy xuất đối tượng User với tên chung Christian Nagel 
trong đơn vị có tổ chức Wrox Press: 
using (DirectoryEntry de = new DirectoryEntry()) 
{ 
de.Path = "LDAP://celticrain/CN=Christian Nagel, " + 
"OU=Wrox Press, DC=eichkogelstrasse, DC=local"; 
Console.WriteLine("Name: " + de.Name); 
Console.WriteLine("GUID: " + de.Guid); 
Console.WriteLine("Type: " + de.SchemaClassName); 
Console.WriteLine(); 
//... 
} 
Đối tượng Active Directory giữ nhiều thông tin hơn, với thông tin có giá trị 
tuỳ thuộc vào kiểu của đối tượng, thuộc tính Propertier trả về 1 
PropertyCollection .mỗi thuộc tính tự nó là 1 tập, bởi vì 1 thuộc tính đơn có 
thể có nhiều giá trị, ví dụ , đối tượng user có thể có nhiều số điện 
thoại.Trong ví dụ ta dùng vòng lặp foreach để quét qua các giá trị.tập mà 
được trả về từ properties [name] là 1 đối tượng mảng . thuộc tính giá trị có 
thể là strings,numbers,hoặc các kiểu khác. ta sẽ dùng phương thức 
ToString() để trình bày các giá trị: 
Console.WriteLine("Properties: "); 
 PropertyCollection properties = de.Properties; 
 foreach (string name in properties.PropertyNames) 
 { 
 foreach (object o in properties[name]) 
 { 
 Console.WriteLine(name + ": " + o.ToString()); 
 } 
 } 
Trong kết quả ta thấy tất cả các thuộc tính của đối tượng user Christian 
Nagel. ta thấy otherTelephone là 1 thuộc tính nhiều giá trị mà có nhiều số 
điện thoại. vài giá trị thuộc tính chỉ trình bày kiểu của đối 
tượng,System.__ComObject, ví dụ lastLogoff,LastLogon, và 
nTSecurityDescriptor. để lấy giá trị của những thuộc tính này ta phải dùng 
interface Active DirectorySICOM trực tiếp từ các lớp trong namespace 
System.DirectoryServices 
Truy xuất 1 thuộc tính trực tiếp từ tên của nó 
Với DirectoryEntry.Properties ta có thể truy xuất tất cả các thuộc tính. nếu 
biết tên thuộc tính ta có thể truy xuất giá trị 1 cách trực tiếp : 
foreach (string homePage in de.Properties["wWWHomePage"]) 
Console.WriteLine("Home page: " + homePage); 
Object collections 
Các đối tượng chứa (container) chứa các đối tượng con .ta có thể lấy các đối 
tượng con này thông qua thuộc tính Children của lớp DirectoryEntry. và ta 
có thể lấy đối tượng chứa (container) của 1 đối tượng bằng thuộc tính Parent 
các đối tượng không chứa các đối tượng khác trả về 1 tập rỗng trong thuộc 
tính Children.thuộc tính Children trả về 1 tập DirectoryEntries mà gom các 
đối tượng DirectoryEntry. ta quét qua các đối tượng DirectoryEntry này để 
trình bày tên của các đối tượng con: 
using (DirectoryEntry de = new DirectoryEntry()) 
{ 
 de.Path = "LDAP://celticrain/OU=Wrox Press, " + 
 "DC=eichkogelstrasse, DC=local"; 
 Console.WriteLine("Children of " + de.Name); 
 foreach (DirectoryEntry obj in de.Children) 
 { 
 Console.WriteLine(obj.Name); 
 } 
} 
Trong ví dụ này ta thấy tất cả các đối tượng trong OU ( organization unit) : 
users,contacts,printers,shares,...nếu ta chỉ muốn thấy một vài kiểu đối tựợng 
ta dùng thuộc tính SchemaFilter của lớp DirectoryEntries. thuộc tính 
SchemaFilter trả về 1 SchemaCollection. với SchemaCollection ta có thể 
dùng phương thức Add() để định nghĩa các kiểu đối tượng ta muốn thấy. ví 
dụ nếu ta quan tâm đến đối tượng user ,ta thêm user vào tập này : 
using (DirectoryEntry de = new DirectoryEntry()) 
{ 
de.Path = "LDAP://celticrain/OU=Wrox Press, " + 
"DC=eichkogelstrasse, DC=local"; 
Console.WriteLine("Children of " + de.Name); 
de.Children.SchemaFilter.Add("user"); 
foreach (DirectoryEntry obj in de.Children) 
{ 
Console.WriteLine(obj.Name); 
} 
} 
Kết quả ta chỉ thấy các đối tượng user trong OU : 
 Cache 
Để giảm bớt việc lưu thông mạng,Active DirectorySI dùng cache cho các 
thuộc tính đối tượng .như ta biết, server không được truy xuất khi ta tạo 1 
đối tượng DirectoryEntry,thay vào đó khi lần đầu ta đọc 1 giá trị từ thư mục 
lưu trữ tất cả các thuộc tính được ghi vào cache,để khi muốn đọc thuộc tính 
lần nữa thì không phải truy xuất server. 
Khi thay đổi bất kì đối tượng nào sẽ chỉ thay đổi trên đối tượng cache,viẹc 
thiết lập các thuộc tính không ảnh hưởng đến lưu thông mạng.để chuyển bất 
kì dữ liệu thay đổi đến server ta dùng DirectoryEntry.CommitChanges() , 
phương thức này sẽ flush ( làm bằng) cache.để lấy dữ liệu được viết mới từ 
thư mục lưu trữ,ta dùng DirectoryEntry.RefreshCache() để đọc các thuộc 
tính.nếu ta thay đổi một vài thuộc tính mà không gọi ComitChanges() và chỉ 
goị RefreshCache() ,tất cả các thay đổi đó sẽ bị mất bởi vì qua phương thức 
RefreshCache() ta đọc lại các giá trị từ dịch vụ thư mục ( lúc này chưa được 
cập nhật từ cache ). 
có thể tắt thuộc tính này của cache bằng cách thiết lập thuộc tính 
DirectoryEntry.UsePropertyCache là false.tuy nhiên ,trừ khi ta muốn debug 
,tốt hơn là không nên tắt cache bởi sẽ làm gia tăng việc truy xuất server 

File đính kèm:

  • pdfActive_Directory_2.pdf