我们正在为我们的DMZ服务器上托管的网站编写自定义身份验证提供程序。该网站建立在名为Kentico的CMS上,该CMS在.NET 4.0框架上运行。 Kentico托管服务器位于DMZ Active Directory林中。还有另一个内部Active Directory林,DMZ AD与内部AD具有单向信任(DMZ信任内部AD,内部AD不信任DMZ)。
我们可以毫无问题地验证DMZ AD用户。但我们还需要能够对内部AD用户进行身份验证。防火墙设置阻止直接访问内部AD域控制器,因此我们需要通过信任并将身份验证请求发送到DMZ AD DC。
尝试验证内部AD用户时 - 身份验证提供程序发送到DMZ DC的LDAP查询失败,并且“找不到用户”。
想知道是否有人在此之前处理过这个问题以及如何解决这个问题。提前感谢您的回复。
答案 0 :(得分: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。
希望有所帮助。