我正面临着使用LDAP的问题,有点奇怪。我的Web服务器是IIS7.5(Windows Server 2008 R2)。它配置为使用Windows身份验证。我在下面粘贴了我的asp页面。
Web浏览器是IE8,已将网站添加到Intranet区域并启用了发送,用户详细信息如果安全选项卡中的Intranet区域 - >自定义级别。在高级选项卡中启用了插入的Windows身份验证。
一切正常20分钟(会话时间和其他默认超时设置为20分钟)。 20分钟后,我得到ASP运行时错误。其中说不支持对象objUser的方法或属性memberOf。当我得到以下错误时,我将身份验证类型更改为基本身份验证。它会提示输入Windows凭据并且工作正常。之后,我再次恢复到Windows身份验证。它可以工作一段时间。
不确定IIS7.5 id是否配置了基本身份验证并且IE8如上配置,仍然是为什么它会提示Windows Credential。虽然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)
%>
答案 0 :(得分:0)
我采用了相当简单的解决方案。
我使用的解决方案如下。
我的应用程序在特定用户身份下运行(物理路径凭据和应用程序池标识设置为DNS帐户)
我使用上面的代码创建了另一个页面,并在applcation池标识(SPN)下运行,并在那里创建了Active Directory服务器和Web服务器服务器之间的主令牌密钥
使用该密钥,我再次连接到LDAP,通过调用具有Windows身份验证的虚拟目录下的上述代码并在用户身份下运行来查询用户相关信息,获取用户详细信息。
如果您使用asp.net以编程方式模仿用户并从ldap获取用户详细信息,并且在应用程序启动时通过连接ldap创建主令牌,主键将持续存在直到工作进程被终止