我正在修改的應用程序有一個Web服務,並且該Web方法上的一個Web方法用於根據活動目錄對用戶進行身份驗證。因此,通過的authenticateUser Web方法稱爲當前的代碼看起來是這樣的:針對Active Directory進行身份驗證的Web服務的安全密碼解決方案?
string domainAndUsername = aDomain + @"\\" + username;
string ldsPath = buildLdsPath(searchBase);
DirectoryEntry entry = new DirectoryEntry(ldsPath, domainAndUsername,
password);
try
{
//Bind to the native AdsObject to force authentication.
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(sAMAccountName=" + username + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
// more code to validate the result, etc...
}
當我開始看這個代碼,這令我擔心的第一件事就是參數的Web方法是這樣的:
[WebMethod]
public ResultObj AddRole(string roleToAdd, string username, string password)
{
// code that calls above Authentication fragment...
}
因此,當請求發送到service.asmx頁面時,當前Web服務正在期待一個密碼字符串,推測爲通過網絡以明文的形式作爲XML發送。
有沒有人處理過這類問題?我可以使用替代的Active Directory身份驗證機制來避免傳遞純文本密碼嗎?我可以自己想出的最佳選擇是使用加密密碼調用WebMethod,並讓另一方的代碼對其進行解密。但是,我更喜歡更好的解決方案 - 例如:是否有某種方式使用單向散列而不是密碼來搜索DirectoryEntry?
編輯:
其他細節:爲了這一點,我還沒有考慮過SSL,因爲這是一種工具,是內部的公司,因此它似乎矯枉過正,可能有問題(這是將在公司內部網上運行,而不是外部可見)。我甚至擔心發送純文本密碼的安全性的唯一原因是,即使在企業內部網上,惡意軟件的數量也在不斷增加(可能是密碼嗅探)。
我已經處理過自己頒發的證書路徑,而且很難按照您的建議進行維護。我可能需要通過公司的IT渠道來獲得來自可信機構的「真實」SSL證書,但這可能是正確的。 – 2009-04-08 20:29:31
重新發布自己的證書 - AD可以發佈您的機器。它將被域中任何其他機器自動信任。 – 2009-04-08 23:08:31
我不知道馬克 - 這是很好的信息。我可能還需要得到批准,因爲AD服務器是爲整個公司服務的(當然),並且不在我們部門的範圍之內。但聽起來好像通過公司渠道更容易做到這一點。 – 2009-04-09 17:46:42