簡體   English   中英

ASP.Net(IIS 7.5)查詢沒有用戶憑據的Active Directory

[英]ASP.Net (IIS 7.5) Querying Active Directory without User Credentials

我有多個我為內聯網構建的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中元數據庫的設置。

我有同樣的問題。 這是我解決它的方式:

對DirectoryEntry構造函數使用重載4 of 5,它不僅允許路徑,還允許用戶名和密碼。 因此,您的AD連接​​應如下所示:

DirectoryEntry adSearchRoot = new DirectoryEntry("LDAP://DC=[DOMAIN],DC=com", "DOMAIN\Username", "Password");
DirectorySearcher adSearch = new DirectorySearcher(entry);

現在,使用服務帳戶代替“DOMAIN \\ Username”,然后使用密碼,顯然,使用服務帳戶的密碼。

我認為只要服務帳戶是“域用戶”組的成員,那么您應該能夠查詢AD沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM