2011-01-10 18 views
1

我已經寫在Visual Basic .NET中的ASP.NET網頁appliaction Windows Server 2003上運行(IIS 6)的作品就像How to grab AD credentials from client machine in a web application?的Active Directory查詢ASP VB.NET中只能在受信任的站點

描述的用戶訪問我們的Intranet頁面,並使用Windows身份驗證來識別用戶。應用程序然後在Active Directory中查找該用戶並獲取該用戶的IPPhone的屬性值。這個數字就是我們用於員工ID的數字。

在IE8中,我可以訪問該站點,並且Windows驗證提示我,它似乎可以正常工作,但應用程序無法獲得我的Active Directory用戶「IP電話」值(也就是我的員工編號)。如果我將URL添加到受信任的站點,應用程序將成功抓取我的員工ID。

這不會是一個大問題,除非它這樣做在每個瀏覽器(火狐,Safari和Chrome)。我發現了一個Firefox的解決方法(ntlm-authenticate,谷歌'關於配置'爲Firefox)。然而,這個應用程序不需要在受信任的站點中,我相信如果我可以在沒有受信任的站點的情況下運行它,它可以在所有瀏覽器中運行。

沒有人有任何想法怎麼回事?提前致謝。

回答

0

看看下面的截圖設置。自動登錄是指在通過Internet Explorer訪問資源時使用Windows身份驗證。換句話說,如果您訪問目錄中服務器上的網頁,則您在機器上登錄的憑證會自動傳遞到您正在訪問的服務器。

憑據一般是由於某種原因不認得我,一起到可信站點傳遞也是如此。我不知道這是爲什麼,但我已經看到這種行爲足以有把握地說出來。

此功能只能在IE中使用,除了你發現Firefox的解決方法,而不會在其他瀏覽器中運行,除非你找到類似的解決方法。

一個更好的解決辦法是在代碼中指定的用戶名和密碼,如下所示:

http://msdn.microsoft.com/en-us/library/wh2h7eed.aspx

此進行搜索,並沿着用戶名和密碼通過,而不是依賴於Windows的集成安全。

alt text

我的代碼工作片斷這裏獲得基於我們的域用戶名的電子郵件,你可以按需要修改:

Public Function GetEmailFromUserName(ByVal UserID As String) As String 
    Dim ReturnValue As String = "" 


    Dim myAD As New System.DirectoryServices.DirectoryEntry("LDAP://mydomain", System.Configuration.ConfigurationManager.AppSettings("adsearchname"), System.Configuration.ConfigurationManager.AppSettings("adsearchpwd")) 
    Dim searcher As New System.DirectoryServices.DirectorySearcher(myAD) 
    searcher.Filter = ("(anr= " & UserID & ")") 
    searcher.PropertiesToLoad.Add("mail") 
    For Each myResult As System.DirectoryServices.SearchResult In searcher.FindAll() 
     For Each Key As String In myResult.Properties.PropertyNames 
      If InStr(myResult.Properties.Item(Key).Item(0), "@") Then 
       ReturnValue = myResult.Properties.Item(Key).Item(0) 
      End If 
     Next 
    Next 

    Return ReturnValue 
End Function 
+0

感謝大衛,我們結束了創建一個低級域用戶帳戶並將其硬編碼到web.config中。之後,我們將其添加到IIS_WPG組中,並且everythign工作! –

+0

好價錢!不要忘記加密你的web.config來保護用戶名/密碼。 – David

相關問題