0

我们正在为托管在我们的 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 查询失败并显示“未找到用户”。

想知道是否有人以前处理过这个问题以及它是如何解决的。预先感谢您的回复。

4

1 回答 1

0

我发现对处于单向信任另一侧的用户进行身份验证的一种可靠方法是使用 advapi32.dll 库中的 LogonUserEx 函数。我确定 LOGON32_LOGON_INTERACTIVE 登录类型有效,而 LOGON32_LOGON_BATCH 无效。LogonUserEx 接受域和用户名作为单独的参数或带有空域参数的用户名的 UPN。

现在 Kentico 有点奇怪,因为他们有两个开箱即用的身份验证提供程序,一个用于针对 Kentico DB 进行身份验证,另一个用于使用 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。

希望有帮助。

于 2013-01-16T18:45:51.363 回答