2015-09-30 20 views
-1

我試圖讓一個ASP.NET應用程序的客戶機連接到使用C#域控制器。獲取客戶端當前的域控制器

該應用程序是永遠不會被暴露在互聯網上,並使用必須通過Windows進行身份驗證的應用程序的每個用戶的Intranet應用。這意味着用戶將始終連接到公司網絡中的域控制器。

我使用下面的代碼嘗試,但它返回的IIS服務器連接到域控制器:所有似乎

using System.DirectoryServices; 

public static string GetDC() 
{ 
    DirectoryEntry Entry = new DirectoryEntry("LDAP://rootDSE"); 
    return Entry.Properties["dnsHostname"].Value.ToString(); 
} 

我讀過關於此事的幾個其他問題產生IIS服務器域控制器。

我的問題是,是否有可能獲得連接域控制器的客戶,如果是這樣,如何?

+0

任何關心解釋downvote? – Gareth

回答

1

一對夫婦約Active Directory身份驗證的東西:

  • 用戶不連接到域控制器。他們進行身份驗證對Active Directory,這是當用戶通過Web應用程序驗證其複製之間的一個又
  • 信息的一個或多個域控制器託管的分佈式服務,這是IIS執行身份驗證。發出401挑戰,並且用戶的機器以令牌形式提供憑證。 IIS然後使用該令牌來認證,授權和識別由Windows身份認證的用戶
  • Web應用程序用戶由WindowsIdentity對象在服務器上表示。 WindowsIdentity對象包含很少的屬性,其中沒有一個會暴露出潛在的AD信息(而不是域/用戶名等)
  • 客戶端代碼(又稱JavaScript)不會訪問到你的機器上的敏感的廣告。如果這樣做會很糟糕。

如果你想詳細身份驗證在AD究竟是如何工作的,看看這裏:https://technet.microsoft.com/en-us/library/cc780332(v=ws.10).aspx

現在,如果用戶在不同的域,然後你可以從用戶的用戶名和使用的域執行AD查找。

string userNameWithDomain = HttpContext.Current.User.Identity.Name; // returns SOMEDOMAIN\USERNAME 

您在'\'上分割並取第一個元素。

+0

感謝您的回覆。正如你可能通過我對這個問題缺乏瞭解所說,我對AD沒有真正的想法!我之所以選擇華盛頓特區是因爲我們公司網絡內的命名慣例是用戶所在網站的簡單標識。 – Gareth

+0

如果您的組織具有良好的命名約定,那麼您可能可以使用該用戶帳戶在ActiveDirectory中的其他位置獲取您正在尋找的信息。看看: http://stackoverflow.com/questions/10428495/get-distinguished-name-from-active-directory-of-currently-logged-in-user https://msdn.microsoft。 com/en-us/library/system.directoryservices.activedirectory(v = vs.110).aspx 您可以在活動目錄中找到大量關於用戶帳戶的信息。然而,找到它並不總是那麼容易。一些語法可能很古老。 – DVK