3.3.1 ng d ng xác th c dùng LDAP
3.3.2 M t s d ch v s d ng nghi th c LDAP
B ng cách k t h p các thao tác LDAP đ n gi n này. Th m c client có th th c hi n các thao tác ph c t p nh các ví d sau đây
M t ch ng mail có th th c hi n dùng ch ng ch đi n t ch a trong th m c trên server LDAP đ kí, b ng cách g i yêu c u tìm ki m cho LDAP server , LDAP server g i l i cho client ch ng ch đi n t c a nó sau đó ch ng trình mail dùng ch ng ch đi n t đ kí và g i cho Message sever. Nh ng góc đ ng i dùng thì t t c quá trình trên đ u ho t đ ng m t cách t đ ng và ng i dùng không ph i quan tâm
Hình 3 - 17 m t mô hình đ n gi n l u tr
Netscape Message server có th s d ng LDAP directory đ th c hi n ki m tra các mail. Khi m t mail đ n t m t đa ch , messeage server tìm ki m đa ch email trong th m c trên LDAP server lúc này Message server bi t đ c h p th ng i s d ng có t n t i và nh n th .
LDAP client LDAP server
Tìm ki m user A trên LDAP server
Client nh n entry c a user A tr v
Ch ng 3: Gi i thi u v LDAP User A Login {DN,PW} Application DUA 1 Bind {DN-AP,PW-AP} 2 Compare {DN,PW} LDAP Serserver Hình 3 - 18 dùng LDAP đ qu n lý th
Dùng LDAP xác th c m t user đ ng nh p vào m t h th ng qua ch ng trình th m tra, ch ng trình th c hi n nh sau đ u tiên ch ng trình th m tra t o ra m t đ i di n đ xác th c v i LDAP thông qua (1) sau đó so sánh m t kh u c a user A v i thông tin ch a trong th m c. N u so sánh thành công thì user A đã xác th c thành công
Hình 3 - 19 xác th c dùng LDAP
LDAP server Message Serserver
3 . Message server nhân di n đ c h p th ng i dùng và sau đó nh n th 1. M t email đn t i đa ch Barabara.Jensen@abc.com 2. Message server dò tìm đa ch email trong th m c
Ch ng 3: Gi i thi u v LDAP
PublicSharedFunction Login(ByVal UserName AsString, ByVal Password AsString) As ADManager.LoginResult 'first, check if the logon exists based on the username and password
If IsUserValid(UserName, Password) Then
Dim dirEntry As DirectoryEntry = GetUser(UserName) IfNot dirEntry IsNothingThen
'convert the accountControl value so that a logical operation can be performed
'to check of the Disabled option exists.
Dim accountControl AsInteger = Convert.ToInt32(dirEntry.Properties("userAccountControl")(0)) dirEntry.Close()
'if the disabled item does not exist then the account is active
IfNot IsAccountActive(accountControl) Then
Return LoginResult.LOGIN_USER_ACCOUNT_INACTIVE Else Return LoginResult.LOGIN_OK EndIf Else Return LoginResult.LOGIN_USER_DOESNT_EXIST EndIf Else Return LoginResult.LOGIN_USER_DOESNT_EXIST EndIf EndFunction
Ch ng 4: Tìm hi u system DirectoryServisces
Ch ng 4: Tìm hi u System.DirectoryServices
4.1. T ng quan v System.DirectoryServices
System.DirectoryServices là m t namespace trong .Net Framework, nó cho phép truy c p đ n Active Directory thông qua k thu t .NET. V i System.DirectoryServices b n có th s d ng các ngôn ng l p trình C#.NET và Visual Basic.NET đ phát tri n các ng d ng có nhu c u truy c p các thông tin trong Active Directory nh các ng i s d ng, các máy tính, các tài nguyên chia s trong m t domain.
S đ sau cho th y cách s p x p c a các API danh b , bao g m c l p mã qu n lý:
Hình 4.1
đây, trong ph m vi đ tài này chúng ta s s d ng System.DirectoryServices namespace đ truy xu t Database Active Directory trên máy domain controller. Và có l không c n ph i nói nhi u h n n a, chúng ta s xem cách s d ng System.DirectoryServices namespace c th ph n ti p theo.
4.2. Cách s d ng System.DirectoryServices
4.2.1. a System.DirectoryServices vào ng d ng
s d ng System.DirectoryServices, d nhiên đi u đ u tiên là chúng ta ph i
đ a System.DirectoryServices vào ng d ng. Trong môi tr ng l p trình, t i project mà b n mu n s d ng System.DirectoryServices:
1. Ch n Website > Add Reference …
Ch ng 4: Tìm hi u system DirectoryServisces
Hình 4.2 Add Referennce System.DirectoryService trong VS2005
3. Ch nđ a dòng sau vào mã: Imports System.DirectoryServices
4.2.2. Liên k t và s d ng các đ i t ng danh b 4.2.2.1. i t ng danh b
M i tài nguyên m ng đ c đ i di n b ng m t đ i t ng trong danh b . Các đ i t ng danh b có các đ c đi m sau:
Tên. Ví d , trong s đ bên d i tên c a m t đ i t ng ng i dùng là CN = Jeff Smith.
Cha. Các đ i t ng m ng đ u k th a và có m t đ i t ng cha cho đ n khi b n dò đ n đ i t ng g c trên đnh c a cây k th a.
ng d n. ng d n c a đ i t ng danh b đ c xây d ng v i tên c a đ i t ng cha đ t tr c tên đ i t ng cho đ n đ i t ng g c. Ví d , đ ng d n c a đ i t ng ng i dùng CN=Jeff Smith là: DC=abc, DC=COM, OU=Sales, CN=Jeff Smith. Các đ ng d n s d ng m t cú pháp đ c đnh b i đ c t LDAP. Hình 4.3 DC=abc, DC=COM OU= Sales CN=Jeff Smith CN=Britta Simon
Ch ng 4: Tìm hi u system DirectoryServisces
4.2.2.2. Liên k t đ n các đ i t ng danh b
đây, trong ph n này tôi không mu n các b n b i r i h n n a vì m t lo t các khái ni m, đnh ngh a, gi i thi u,…Do đó chúng tôi s đ a ra các ví d c th
mà chúng tôi tin ch c là hoàn toàn d hi u đ i v i t t c m i ng i. Và t các ví d này các b n có th d dàng áp d ng l i cho các m c đích c a mình.
Liên k t đ n domain hi n hành: trong ngôn ng VisualBasic.NET b n ch c n khai báo:
Dim ent As New DirectoryEntry()
Liên k t đ n m t máy ch c th : b n ch c n đ a tên máy ch mà b n mu n
k t n i đ n. Ví d nh b n mu n liên k t đ n máy ch tên là server1 thì b n s khai báo nh sau:
Dim ent As New DirectoryEntry("LDAP://server01")
Public Shared Function GetDirectoryEntry() As DirectoryEntry Dim dirEntry As DirectoryEntry = New DirectoryEntry()
dirEntry.Path = ADFullPath ' "LDAP://192.168.1.1/CN=Users;DC=ABC;DC=COM"
dirEntry.Username = ADAdminUser ' "admin"
dirEntry.Password = ADAdminPassword '"adminpass"
Return dirEntry End Function
Liên k t đ n m t domain c th : t ng t đ liên k t đ n m t domain c th b n s ph i đ a vào tên c a domain y.
Dim ent As New DirectoryEntry("LDAP://abc.com") Liên k t đ n m t đ i t ng c th :
Khi b n c n ch nh s a hay đ c thông tin t m t đ i t ng c th , b n s đ a tên c a đ i t ng đó vào. Gi s nh ví d trong ph n 4.2.2.1, n u b n mu n liên k t đ n đ i t ng Jeff Smith, b n s đ a vào tên đ y đ c a đ i t ng đó:
+ N u b n bi t ch c ch n đ i t ng mà mình mu n liên k t đ n thu c domain c a mình thì b n ch c n khai báo:
Dim ent As New DirectoryEntry("LDAP://CN=JeffSmith,OU=Sales,DC=abc,DC=Com")
+ N u b n bi t đ i t ng đó thu c v máy ch nào:
Dim ent As New DirectoryEntry("LDAP:// server01/CN=Jeff Smith,OU= Sales,DC=abc,DC=Com")
+ N u b n bi t đ i t ng đó thu c v domain nào:
Ch ng 4: Tìm hi u system DirectoryServisces
Sau khi đã liên k t đ n m t đ i t ng mong mu n, b n có th s d ng các thông tin c a chúng m t cách tùy thích. Nh v i đ i t ng ng i dùng là Jeff Smith, b n có th l y s nhà, s đi n tho i, nhóm làm vi c, Reset password…c a đ i t ng này.
PublicSharedSub SetPassword(ByVal dEntry As DirectoryEntry, ByVal sPassword AsString) Dim oPassword AsObject() = NewObject() {sPassword}
Dim ret AsObject = dEntry.Invoke("SetPassword", oPassword) dEntry.CommitChanges()
EndSub
Và đ k t l i ph n này chúng tôi mu n các b n xem m t ví d n a, m t ví d mà tôi đã s d ng đ l y v tên c a các máy tính đã login domain c a mình: PublicSharedFunction ListAllADComputers() As DataSet
Dim dirEntry As DirectoryEntry = = New DirectoryEntry()
dirEntry.Path = ADFullPath ‘"LDAP://192.168.1.1/CN=Users;DC=ABC;DC=COM"
dirEntry.Username = ADAdminUser ' "admin"
dirEntry.Password = ADAdminPassword '"adminpass"
Dim dsComputerName AsNew DataSet()
' 1. Search the Active Directory for all objects with type of computer
Dim dirSearcher As DirectorySearcher = New DirectorySearcher(dirEntry) dirSearcher.Filter = ("(objectClass=computer)")
' 2. Check the search results
Dim dirSearchResults As SearchResult
Dim dtList As DataTable = dsComputerName.Tables.Add("Computer") dtList.Columns.Add("ComputerName")
' 3. Loop through all the computer names returned
ForEach dirSearchResults In dirSearcher.FindAll()
'4. Check to ensure the computer name isnt already listed in the collection
IfNot pcList.Contains(dirSearchResults.GetDirectoryEntry().Name.ToString()) Then
' 5. Add the computer name to the collection (since it dont already exist)
pcList.Add(dirSearchResults.GetDirectoryEntry().Name.ToString()) Dim drGroup As DataRow = dtList.NewRow()
drGroup("ComputerName") = dirSearchResults.GetDirectoryEntry().Name.ToString() dtList.Rows.Add(drGroup)
EndIf
Next
' 6. Return the results
' Return pcList
Return dsComputerName
Ch ng 5: ng d ng và các ch c n ng c a ng d ng
Ph n 3: Thi t k và cài đ t ng d ng
Ch ng 5: ng d ng và các ch c n ng c a ng d ng
5.1. Gi i thi u ch ng trình
Ch ng trình MINI ADMANGER đ c xây d ng d i d ng d ch v web.
Ch ng trình đ c chia làm hai ph n:
Ph n I: ph n giao di n dùng đ giao ti p v i ng i dùng ch y trên n n web application đ c dùng đ g i (Request) và nh n (Response) các yêu c u c a ng i dùng.
Ph n II: ph n ti p nh n các yêu (Request) và tr l i các yêu c u (Response) và s lý các yêu c u c a ng i dùng. Ph n này còn làm nhi m v k t n i v i Active Directory Server thông qua giao th c LDAP. Ph n II ch y trên n n Web Service.
Hai ph n trên đ c cài đ t đ ch y trên Web Server IIS. Nên ng i dùng không c n cài đ t ng d ng v n có th quàn tr đ c AD. Nh v y thì b n có th yên tâm s d ng máy tính n i m ng, đi n tho i di đ ng k t n i GPRS hay Pocket PC k t n i Wireless đ qu n tr AD. 5.2. Các l p chính c a ch ng trình Ch ng trình g m các l p chính sau: Hình 5-1 Các l p chính c a ch ng trình Request Remote Business LDAP Access Response AD Database Web Form Event AP Server Client Request Response
Ch ng 5: ng d ng và các ch c n ng c a ng d ng
Ph n I: Client L p Web Form
L p này ch a Web form dùng đ giao ti p v i ng i dùng và d ch v bên d i. Ng i dùng s th c hi n các thao tác Select, Insert, Update, Delete trên Web form này. Sau khi ng i dùng đã th c hi n xong các thao tác và b m ch n nút submit thì ch ng trình s th c hi n l y các thông tin t Web form và chuy n thành các Request đ g i đ n Web service và nh n v các Response. L p này đóng vai trò t ng VIEW trong mô hình Model-view-controller (MVC). Và ph n code behind đóng vai trò nh t ng Controller.
Ph n II: Application Server (Web Service) L p Business Logic
File đnh ngh a class Business Logic là file đnh ngh a logic nghi p v , mà đ c đ nh ngh a cho t ng event . Là file s d ng LDAP Data Access module mà đ c Code v m t ki n trúc và v a th c hi n truy c p Active Directory , v a th c thi logic nghi p v .
t tên theo lu t d i đây cho tên class và tên file c a file đnh ngh a business logic. G i businessLogicID đ ID đ c thành là Biz[ID màn hình]_[chu i].
Screen ID ch ph n mà đã b [Frm] đ u tiên
Bussiness LogicID đ c đnh ngh a trong [khái quát x lý] c a b ng thi t k c b n
Tên file đnh ngh a business logic Biz[ID màn hình]_[ chu i].vb Tên business logic Biz[ID màn hình]_[ chu i]
Ví d : ID màn hình:frmG001_ListGroup Tên màn hình: li t kê thông tin t t c các nhóm trong AD.
Tên file đnh ngh a business logic :BizG001_ListGroup.vb Tên business logic: BizG001_ListGroup
Tr ng h p th c thi (implement) business logic, t o class AbstractBusinessLogic mà cho phép t o ch c n ng c b n c a businesslogic, r i implement logic b ng cách overwrite function ExecuteLogic. Vi c overwrite ExecuteLogic là b t bu c đ i v i các class con k th a t AbstractBusinessLogic. Chúng ta s đ nh ngh a function
ExecuteLogic() trong kh i Try ….. Catch … Finally l p cha nên t t c l p con k th a t l p cha s đ c Try ….. Catch 100% giúp ch ng trình ch u l i t t h n. Input Parameter c n đ th c hi n Bussiness Logic và Output Parameter truy n k t qu th c hi n qua n i g i thì đnh ngh a nh là Property c a Bussiness Logic Class mà s Coding toàn b . Input Parameter thì đ nh ngh a nh là WriteOnly Property, Output Parameter thì đnh ngh a nh là ReadOnly Property, và s đnh ngh a chính xác xem Property đang đ c đ nh ngh a là Property c a n i input output nào
Tr ng h p x lý business ph c t p, function ExecuteLogic s tr nên quá dài, không th đ c đ c code ch ng trình, tính b o trì l i th p. Khi đó, đ review business logic t t h n, thì implement function vào m t function đ n gi n, phân ra các function các
Ch ng 5: ng d ng và các ch c n ng c a ng d ng
đ n v x lý t p trung. Các hàm mà đnh ngh a m c đích này, thì s đ nh ngh a modifier access là Private.
L p remote
Ch c n ng remote method, nh là WEB Service, t bên trong remote method đ c request t client, g i BusinessLogic, r i tr k t qu v nh là response. nh ngh a 1 method cho 1 BusinessLogic. t tên cho tên method và signal theo lu t d i đây. Tên method Remote [BusinessLogicID]
i s [BusinessLogicID]Request
Giá tr tr v [BusinessLogicID]Response
Ví d ) ID màn hình: frmG001_ListGroup.aspx Tên màn hình: X lý l y thông tin t t c các Group.
Tên method RemoteBizG001_ListGroup i s BizG001_ListGroup_Request
Giá tr tr v BizG001_01_ListGroup_Response
<WebMethod()> _
PublicFunction RemoteBizG001_ListGroup(ByVal request As BizG001_ListGroup_Request) As
BizG001_01_ListGroup_Response
' [VN] Khai bao logic va response
Dim logic As BizG001_ListGroup = Nothing
Dim response As BizG001_01_ListGroup_Response = Nothing
Try
logic = New BizG001_ListGroup()
response = New BizG001_01_ListGroup_Response
LogHistory(Nothing, "RemoteBizG001_01_ListGroup", "Execute BizG001_01_ListGroup", "") ' [VN]Goi business logic roi thiet dinh parameter input
logic.ADAdminPassword = request.ADAdminPassword logic.ADAdminUser = request.ADAdminUser logic.ADFullPath = request.ADFullPath logic.ADServer = request.ADServer logic.prostrSearch = request.prostrSearch '[VN]Thuc hien business logic
logic.Execute()
'[VN]Kiem chung ket qua thuc hien cua business logic,thiet dinh return code.
'[VN]Truong hop businesslogic thuc hien that bai, thiet dinh Error code,tra ve error message
If logic.NumError = 0 Then response.ReturnCode = LogicReturnCode.LOGIC_RETUEN_CODE__SUCCEEDED response.proDsList = logic.proDsList Else response.ReturnCode = LogicReturnCode.LOGIC_RETURN_CODE__FAILED response.ErrMsg = logic.ErrorMsg EndIf Catch ex As Exception
LogFatal(Nothing, "RemoteBizA0101_01", "ERROR_MSG__REMOTE_METHOD_EXECUTION_FAILED", ex) If response IsNotNothingThen
'response.AddErrorMsg(ERROR_MSG__REMOTE_METHOD_EXECUTION_FAILED & ex.Message)
EndIf
EndTry
'[VN]gui den client response da thiet dinh.
Return response EndFunction
Ch ng 5: ng d ng và các ch c n ng c a ng d ng
L p request/ response
Class remote method request/ responce là class quy đnh Input parameter cho remote method và output parameter tr v sau khi th c hi n remote method. nh ngh a cho class request/ responce này, t t c input parameter cà output parameter tr v khác nhau tùy vào Businesslogic nh là property, và n u g i remote method t client thì thông qua remote method request, implement đ l y k t qu v cho remote method response.
t tên cho tên class remote method request/ responce theo lu t d i đây. Tên remote method request [BusinessLogicIID] Request
Tên remote method responnce [BusinessLogicIID] Response
Ví d ) ID màn hình: frmT0102 Tên màn hình: X lý l y thông tin nhân viên c a màn hình tính gi
Tên remote method request: BizG001_ListGroup_Request.vb
Tên remote method responnce: BizG001_01_ListGroup_Response.vb
Hàm chung/ nh ngh a Constant
Hàm chung và đ nh ngh a Constant đ c s d ng trên toàn b h th ng thì s d ng hàm chung, constant đ c đnh ngh a trên File ADManager.vb
Thi t đnh Log (web.config)
Vi c t o Log Output trên Application thì t o Log Output Level mô t trên log4net Action c a app.config (n u Server Program là web.config), và t o n i Output c a File Log. Ph ng th c Output Log thì t n t i 2 lo i: th 1 là ph ng th c Rotation File Log, t o File Log t ng ngày, ph ng th c 2 là Output toàn b vào 1 File Log. Nh ng cái này có th s d ng thay th .
[Thay th ph ng th c Output Log]
Ph ng th c Output Log thì có th ch n RollingLogFileAppender mà Rotation t ng ngày và LogFileAppender mà Output toàn b vào 1 File. Vi c thay th thì thi t đ nh giá tr RollingLogFileAppender ho c LogFileAppender vào nh ng ch bên d i. <root>
<!-- Setting of debugging level (please set the actual operational time above INFO level) --> <!--[The log level which it can set]DEBUG,INFO,WARN,ERROR,FATAL -->
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/> * The value of ref here is modified
Vi c t o Log Output trên Application thì t o Log Output Level mô t trên log4net Action c a app.config (n u Server Program là web.config), và t o n i Output c a File Log.
Ph ng th c Output Log thì t n t i 2 lo i: th 1 là ph ng th c Rotation File Log, t o File Log t ng ngày.
Ph ng th c 2 là Output toàn b vào 1 File Log. Nh ng cái này có th s d ng thay th .
[Thay th ph ng th c Output Log]
Ph ng th c Output Log thì có th ch n RollingLogFileAppender mà Rotation t ng