2013-01-13 70 views
0

我們正在爲我們的DMZ服務器上託管的網站編寫自定義身份驗證提供程序。該網站建立在運行於.NET 4.0框架上的名爲Kentico的CMS上。 Kentico託管服務器位於DMZ Active Directory林中。還有另一個內部Active Directory林,DMZ AD與內部AD具有單向信任關係(DMZ信任內部AD,內部AD不信任DMZ)。通過單向信任的Active Directory自定義身份驗證提供程序

我們可以毫無疑問地認證DMZ AD用戶。但我們也需要能夠驗證內部AD用戶。防火牆設置阻止對內部AD域控制器的直接訪問,因此我們需要通過信任並將身份驗證請求發送到DMZ AD DC。

當試圖驗證內部AD用戶時 - 身份驗證提供程序向DMZ DC發送的LDAP查詢失敗,並顯示「未找到用戶」。

想知道是否有人曾經處理過這個問題,以及它是如何解決的。預先感謝您的回覆。

回答

0

我發現驗證單向信任另一端的用戶的一種方法是使用advapi32.dll庫中的LogonUserEx函數。我確信LOGON32_LOGON_INTERACTIVE登錄類型可以工作,而且LOGON32_LOGON_BATCH不會。 LogonUserEx同時接受域名和用戶名作爲單獨的參數,或者接受具有空域參數的用戶名的UPN。

現在Kentico有點奇怪,他們有兩個開箱即用的身份驗證提供程序,一個用於對Kentico數據庫進行身份驗證,另一個用於使用System.Web.Security程序包中的ActiveDirectoryMembershipProvider登錄AD。該提供者似乎無法在單向信任的另一端登錄任何人。現在,Kentico不允許您使用自定義提供程序來代替,而是需要通過事件處理程序進行任何自定義身份驗證。

Kentico文檔在如何製作自定義事件處理程序方面有點薄弱。這是他們對Kentico 7的一個鏈接(與Kentico 6大致相同) - http://bit.ly/13DXrFA。關於製作自定義事件處理程序的唯一其他實用信息是用於Kentico 6,但它對於Kentico 7應該可以正常工作,可以在這裏找到 - http://bit.ly/13DXLEc。正如您從該鏈接中看到的,要定位的事件是SecurityEvents.Authenticate.Execute。

希望有所幫助。

相關問題