是否可以從Web應用程序中獲取客戶端計算機上的用戶的活動目錄憑據?如何在Web應用程序中從客戶端計算機獲取AD憑據?
爲了澄清,我正在設計一個將駐留在客戶端Intranet上的Web應用程序。
需要在訪問應用程序時不提示應用程序的用戶提供憑據,而是應該自動抓取登錄到客戶機的用戶憑證,而無需用戶交互。
是否可以從Web應用程序中獲取客戶端計算機上的用戶的活動目錄憑據?如何在Web應用程序中從客戶端計算機獲取AD憑據?
爲了澄清,我正在設計一個將駐留在客戶端Intranet上的Web應用程序。
需要在訪問應用程序時不提示應用程序的用戶提供憑據,而是應該自動抓取登錄到客戶機的用戶憑證,而無需用戶交互。
也許.NET有一個更直接的方式來做到這一點,但使用PHP,我只是作爲LDAP服務器訪問我們的Active Directory服務器。
我不確定需要對服務器進行哪些調整才能做到這一點。我沒有設置服務器,我只是查詢它。 我並不是建議你使用PHP。我只是覺得更容易處理LDAP,然後嘗試直接綁定到Active Directory。
絕對如此。這對於Intranet應用程序尤其有用。
既然你沒有指定你的環境,我會認爲它是.NET,但這當然不是唯一的可能。
使用LDAP可以輕鬆查詢Active Directory。如果你使用.NET,你可以在this code example或下面的例子中做類似的事情。你也可以在SQL environments之內完成。
如果您只需要Windows來處理身份驗證,則可以將.NET Web應用程序設置爲Windows Authentication。請確保您的應用程序在IIS內的turn off Anonymous Logins。完成後,您將能夠訪問用戶的Windows登錄名並使用它進行進一步的安全檢查(例如,其AD公司的group/role membership)。
您還可以使用企業圖書館的Security Application Block之類的東西簡化整個混亂。
下面是一個簡短的C#示例:(轉換到VB.NET here)
using System.DirectoryServices;
/// <summary>
/// Gets the email address, if defined, of a user from Active Directory.
/// </summary>
/// <param name="userid">The userid of the user in question. Make
/// sure the domain has been stripped first!</param>
/// <returns>A string containing the user's email address, or null
/// if one was not defined or found.</returns>
public static string GetEmail(string userid)
{
DirectorySearcher searcher;
SearchResult result;
string email;
// Check first if there is a slash in the userid
// If there is, domain has not been stripped
if (!userid.Contains("\\"))
{
searcher = new DirectorySearcher();
searcher.Filter = String.Format("(SAMAccountName={0})", userid);
searcher.PropertiesToLoad.Add("mail");
result = searcher.FindOne();
if (result != null)
{
email = result.Properties["mail"][0].ToString();
}
}
return email;
}
您不必到指定的域控制器。執行DirectorySearcher的空白/默認構造函數將導致它嘗試自動查找一個—實際上,這是the preferred method。
我試圖做一些類似於您描述的內容,但是您是否必須指定Active Directory路徑的某處? – Geoff 2008-10-10 18:21:15
不是。如果你不這樣做,它會問你的本地DNS。這實際上是首選的「可擴展」方法。查看我的擴展/編輯答案。 – 2008-10-10 20:03:39
不,當然不是。你能想象一下這個破壞會導致隨機的網絡應用程序能夠得到你的AD用戶名和密碼嗎?
現在,如果您只需要用戶名 - 如果您使用的是integated windows auth,則在REMOTE_USER中。而且,Windows驗證會自動將用戶登錄到您的網站 - 假設您共享一個域(或信任)。
編輯:IWA在Intranet方案中工作,因爲IE默認情況下在Intranet安全區域中包含Intranet站點。另外,系統管理員可以使用GPO設置其他可信網站。 Firefox也是supports NTLM,Opera和Chrome也是如此。總而言之,建立一個內聯網並不是一個壞方法。
但請注意,您沒有獲得憑據。你與客戶談判一個令牌,這是IWA安全的保證(和我的上述觀點相關)。
Windows集成身份驗證,用戶必須使用IE,並且該站點必須位於用戶的可信站點中。如果這些事情是真的,那麼IE會將您的Windows安全令牌傳遞給網站,並且它會對其進行驗證。我們在Intranet上使用SharePoint來做到這一點,否則,訪問任何受限制的內容都是一種痛苦 - 每次單擊文檔時都會收到提示。
什麼是web應用程序框架? ASP.NET?這將是相關的。 – 2008-10-10 17:34:53