加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.Net(IIS 7.5)查询没有用户凭据的Active Directory

发布时间:2020-12-16 09:36:01 所属栏目:asp.Net 来源:网络整理
导读:我有多个我为内联网构建的Web应用程序.我想让用户不必担心登录,因此这些应用程序会在当前登录的用户访问网站时将其拉出.我使用此代码实现此目的: Dim userName As String = User.Identity.NameCurrentUser = userName.Substring(userName.IndexOf("") + 1)
我有多个我为内联网构建的Web应用程序.我想让用户不必担心登录,因此这些应用程序会在当前登录的用户访问网站时将其拉出.我使用此代码实现此目的:

Dim userName As String = User.Identity.Name
CurrentUser = userName.Substring(userName.IndexOf("") + 1)

这就像一个魅力,这里没有问题.下一步是查询该登录用户的Active Directory以提取各种信息.我目前如何编码,它的工作方式就像在devleopment方面的魅力(典型的是因为我没有运行IIS).

当我将其发布到我的IIS服务器(运行IIS 7.5的Windows Server 2008 R2)时出现问题,我收到的错误消息指向我的代码中查询Active Directory的特定行.有趣的是,这些应用程序上周运行良好.在我的服务器管理员执行了最新一批Windows更新后,他们破了(请注意,我使用.Net Framework 4.0运行它们)

在我为每个应用程序设置以便启用Windows身份验证之前,其他身份验证类型已被禁用.对于提供商,Negotiate是#1,NTLM是#2.对于高级设置,请选中“扩展保护=关闭”和“启用内核模式身份验证”.

我的web.config有以下设置:

<customErrors mode="Off"/>
<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>

这些是我的设置,一切都像魅力一样.现在要让它有点工作我需要交换提供商,所以NTLM是#1,Negotiate是#2.因此,用户的凭据未正确传入,并且AD查询失败.这是我用于查询的编码:

Dim adSearchRoot As New DirectoryEntry("LDAP://DC=[DOMAIN],DC=com")
Dim adSearch As New DirectorySearcher(adSearchRoot)

adSearch.Filter = "(&(ObjectClass=User)(sAMAccountName=" & CurrentUser & "))"
Dim searchResult As SearchResult = adSearch.FindOne()

自更新以来,当前面的Negotiate加载网站时,它在底线上失败,因为我没有为DirectoryEntry设置用户名/密码.即使我设置了用户名/密码,它仍然不像过去那样100%工作.

所以我的问题变成了,我需要做什么才能让用户访问网站,我可以知道他们的用户名,并且可以查询活动目录而无需在DirectoryEntry中使用用户名/密码?

它是IIS中的设置吗?
或者我需要重新编码?
也许是web.config设置?
我是否需要还原服务器更新并确定哪一个导致中断发生?

感谢您的建议.如果您有任何问题要帮助回答这个问题,请告诉我.

UPDATE

我尝试通过将以下剪辑添加到我的web.config文件中来建议Matt:

<security>
  <authorization>
    <add accessType="Deny" users="?" />
  </authorization>
</security>

这没用.我做了一些阅读,然后进一步修改了这一部分:

<location path="Default Web Site/NameOfApp">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="false"/>
        <windowsAuthentication enabled="true">
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
      <authorization>
        <add accessType="Deny" users="?" />
      </authorization>
    </security>
  </system.webServer>
  </location>

在这样做的过程中,我还删除了web.config部分中较高的字符串.这也没用(fyi,这是一个很好的参考http://www.iis.net/ConfigReference/system.webServer/security/authentication)

然后我跳过了这篇文章:http://social.technet.microsoft.com/Forums/en/winserverDS/thread/7deba16b-295a-4887-98f9-9f291ed49871,这似乎是一个类似的情况.本文最后引用了“Double Hops”,在研究了这个并尝试了一些事情之后,这也没有解决我的问题.

下一步

我将在不同的Server 2008 R2系统上尝试新的IIS 7.5实现,并且基本上从头开始,以查看问题是否重新创建.

任何新的建议都会有很大的帮助.

解决方法

我能够在Windows 2008 Server上执行代码而不会出现任何问题.我创建了一个新的.NET 4.0应用程序池并将其分配给Web应用程序.我更改了web.config以拒绝匿名访问并使用Windows身份验证.代码执行无例外.

看看你的web.config剪辑,我想知道这可能是你所缺少的:

<system.webServer>
    <security>
      <authorization>
        <add accessType="Deny" users="?" />
      </authorization>
    </security>
  </system.webServer>

在system.webServer部分中拥有此授权部分非常重要. IIS 7使用system.webServer部分存储一些属于IIS 6中元数据库的设置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读