【问题标题】:LDAP Error in IIS7.5 while using windows Authentication使用 Windows 身份验证时 IIS7.5 中的 LDAP 错误
【发布时间】:2012-06-14 19:20:15
【问题描述】:

我遇到了 LDAP 的问题,它有点奇怪。我的 Web 服务器是 IIS7.5(windows server 2008 R2)。其配置为使用 Windows 身份验证。我在下面粘贴了我的 asp 页面。

网页浏览器为IE8,已将网站添加到内网区域并启用发送,如果内网区域在安全选项卡->自定义级别,则发送用户详细信息。在高级选项卡中启用了集成 Windows 身份验证。

20 分钟内一切正常(会话时间设置和其他默认超时设置为 20 分钟)。 20 分钟后,我得到了 ASP 运行时错误。其中表示不支持对象 objUser 的方法或属性 memberOf。当我得到以下错误时,我将身份验证类型更改为基本身份验证。它提示输入 Windows 凭据并且工作正常。之后,我再次恢复到 Windows 身份验证。它可以工作一段时间。

不确定 IIS7.5 id 是否配置了启用基本身份验证和 IE8 配置如上,仍然是为什么它提示输入 windows 凭据。虽然 Windows 身份验证模式不会提示输入凭据,但它可以正常工作,但在一段时间内。谁能解释我为什么会出现这种奇怪的行为以及解决此问题的解决方案?

<%@ LANGUAGE="VBSCRIPT" %>
<%
 Option Explicit

Dim oADSysInfo
Dim objUser
Dim strGroupData
Dim strUserDN
 Dim arrGroups
 Dim strGroup
 Dim wsObject
 Dim netSys
 Dim strUsrDomain

 strGroupData = ""
    Set wsObject = CreateObject("WScript.Shell")
 Set netSys =   CreateObject("WScript.Network")

 strUsrDomain = netSys.UserDomain
Set oADSysInfo = CreateObject("ADSystemInfo")

 If err.number <> 0 Then
 'getLDAPGroupInfo = strGroupData
  'wsObject.popup("Error"& e.decription)
 'Exit Function
 End If
 strUserDN = oADSysInfo.UserName
 Set objUser = GetObject("LDAP://"& strUserDN)
 arrGroups = objUser.memberOf

  If IsEmpty(arrGroups) Then
  'Wscript.Echo "Member of no groups"
 ElseIf (TypeName(arrGroups) = "String") Then
  'Wscript.Echo "Member of group " & arrGroups
  strGroupData = arrGroups
 Else

  For Each strGroup In arrGroups
   strGroupData = strGroupData & "," & strGroup
 Next
  'strGroupData = arrGroups


 End If 
     Response.Write(strGroupData)
%>

【问题讨论】:

  • 在进一步调查时,我注意到由于进程空闲超时设置为 20 分钟,因此在 20 分钟后出现问题。在事件日志中,我发现 WAS 事件,该读取工作进程由于指定空闲超时不活动而被关闭。将在需要时创建新的工作进程。据此,我假设生成的 Worker 进程使用不同的设置,因此它失败了
  • 今天我发现如果我使用 localhost 访问网站,即使在之前的 cmets 中提到过 WAS 之后,它也可以正常工作。但要求提供凭据(我假设基本身份验证已打开)。之后,我什至可以使用其他浏览器中的 web 应用程序并打开 Windows 身份验证。我不确定究竟是哪个导致了问题,LDAP、IIS 还是某些 IIS 设置覆盖了我的网站设置?
  • 昨天提到的问题都是“双跳问题”的标志。是否有任何简单的机制可以在网络服务器级别解决此问题而不涉及 LDAP 服务器?

标签: asp-classic vbscript ldap iis-7.5 windows-authentication


【解决方案1】:

我采用了相当简单的解决方案。

我采用的解决方案如下。

  1. 我的应用程序在特定用户身份下运行(物理路径凭据和应用程序池身份设置为 DNS 帐户)

  2. 我使用上述代码创建了另一个页面并在应用程序池标识 (SPN) 下运行,并在 Active Directory 服务器和 Web 服务器服务器之间创建了一个主令牌密钥

  3. 使用该密钥我再次连接到 LDAP,通过在具有 Windows 身份验证并在用户身份下运行的虚拟目录下调用上述代码来查询用户相关信息,从而获取用户详细信息。

如果您使用 asp.net 以编程方式模拟用户并从 ldap 获取用户详细信息,并在应用程序启动时通过连接 ldap 创建主令牌,则主键将持续存在直到工作进程被杀死

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多