2017-08-09 105 views
0

我正在創建一個服務來搜索LDAP中的用戶。這應該是相當直接的,並且可能已經完成了一千次,但我似乎無法正確突破。我以爲我有它,但隨後我將它部署到IIS,它都崩潰了。LDAP搜索在服務器上失敗,而在Visual Studio中失敗

以下是設置爲環境變量:

  • ldapController
  • ldapPort
  • adminUsername絕對不同的用戶比誤差報告
  • adminPassword
  • baseDn

並通過我的Startup.Configure方法讀入。

編輯我知道它們可用於IIS,因爲我在REST端點中返回它們。

這是我的代碼:

// Connect to LDAP 
    LdapConnection conn = new LdapConnection(); 
    conn.Connect(ldapController, ldapPort); 
    conn.Bind(adminUsername, adminPassword); 

    // Run search 
    LdapSearchResults lsc = conn.Search(
    baseDn, 
    LdapConnection.SCOPE_SUB, 
    lFilter, 
    new string[] { /* lots of attributes to fetch */ }, 
    false 
); 

    // List out entries 
    var entries = new List<UserDto>(); 
    while (lsc.hasMore() && entries.Count < 10) { 
    LdapEntry ent = lsc.next(); // <--- THIS FAILS! 
    // ... 
    } 
    return entries; 

正如我所說的,在Visual Studio調試這個時候,這一切工作正常。部署到IIS時,錯誤是;

登錄失敗,用戶 '域\ IIS_SERVER $'

爲什麼? adminUsername中指定的用戶應該是用於登錄的用戶(通過conn.Bind(adminUsername, adminPassword);),對吧?那麼爲什麼它會爆炸說明IIS用戶是進行登錄的人?

編輯我使用Novell.Directory.Ldap.NETStandard

編輯在上面的錯誤中指定的「用戶」,其實並不是一個用戶都沒有。它是運行IIS的計算機的AD註冊名稱......如果這有什麼區別的話。

UPDATE與同事協商後,我成立了一個新的應用程序池在IIS上,並試圖運行該應用程序爲指定的用戶,而不是默認passthrough。完全相同的錯誤消息,無論我設置了哪個用戶。

+0

'以下設置爲環境變量:'IIS用戶可以讀取這些環境變量嗎? – mjwills

+0

製作一個只呈現環境變量的網頁。 – mjwills

+0

絕對確定IIS可以讀取我的環境變量@mjwills。更新的問題。 –

回答

0

通過網絡憑據嘗試將它允許您指定域:

var networkCredential = new NetworkCredential(userName, password, domain); 
conn.Bind(networkCredential); 

如果還是不行,請指定綁定調用之前的認證類型基本的(不知道默認是)。

conn.AuthType = AuthType.Basic; 
+0

'Novell.Directory.Ldap。LdapConnection'似乎沒有包含一個重載的類型爲「NetworkCredential」的參數。 'Novell.Directory.Ldap.LdapConnection'也沒有名爲'AuthType'的屬性。 :-( –