2012-11-16 62 views
3

我使用HttpContext.Current.User.Identity.Name獲取登錄用戶的用戶名。我想知道這是如何工作的(使用NTLM v2/Kerberos)以及它有多安全?用戶可以嘗試模仿他是其他人嗎?HttpContext.Current.User.Identity.Name如何工作?它有多安全?

基本上,從安全的角度來看,有什麼我應該擔心的,還是應該如何改進呢?

+0

你可以絕對肯定它!一旦用戶通過身份驗證(並且它可能是安全問題),那麼該屬性是完全安全的。你可以改進/選擇的是認證方法,密碼強度,http(非 - )嗅探和類似的東西。 –

+0

@Adriano - 我的應用程序正在使用HTTPS。身份驗證方法僅在Windows登錄時完成,而不是與應用程序有關,這是正確的嗎? 有沒有關於這個問題的任何微軟引用? –

+2

你使用Windows身份驗證?那麼它應該足夠安全(而弱部分是Windows用戶用來登錄的密碼)。根本不用擔心User.Identity,它很安全。安全問題將更容易來自我們編寫的代碼(以及用戶將選擇的密碼),而不是來自「基礎架構」和經過良好測試的代碼。 –

回答

3

如果您使用的是Windows身份驗證(假定你的NTLM/Kerberos的提及看來你是),那麼會發生什麼情況(大致)如下

  • IE認證發送沒有認證頭的請求你的網絡服務器。
  • IIS拒絕與401響應碼的請求,並告訴瀏覽器,它希望認證方案(在這種情況下協商,它首先嚐試的Kerberos,然後回落到NTLM)
  • 路邊握手發生在多個連接,並根據公告驗證該票據
  • IIS將票證傳遞給ASP.NET,該票據在構建Request對象的過程中使用票證中的身份詳細信息填充分配給該請求的線程上的主體。
  • 當您訪問HttpContext.User時,您會看到當前線程的主體。

它很安全。它基本上與通過文件共享或其他使用kerberos的其他任何服務器連接到Windows服務器時使用的身份驗證類型基本相同。實際上,IIS和Windows本身是做大部分工作的,ASP.NET只是給你一個查詢結果的好方法。

+0

User.Identity.Name與使用Forms Authentication時一樣安全嗎? –