2012-07-13 192 views
2

我正在創建一個我希望用戶註冊的個人網站。我一直在尋找各種需要採取的安全措施,並對我必須注意的主要事情感到好奇。我決定不使用ASP.NET Forms身份驗證,主要是爲了自己創建身份驗證過程的樂趣。以下是我迄今所做:未使用表單身份驗證的身份驗證

  • 我有我在哪裏存儲用戶的登錄信息的MySQL數據庫,如自己的密碼和鹽
  • 在登錄時的哈希值,設置等於會話他們的用戶名 - 這使我想到了這個問題:這是不使用表單身份驗證來跟蹤登錄用戶的最佳方式嗎?例如,設置會話想是這樣的:

    Session["User"] = username;

有沒有一種更好的方式去有關跟蹤登錄的用戶?或者這是一種可以接受但仍然安全的處理事物的方式?

+0

你可能會想設定的語境(自定義)校長。 – 2012-07-13 15:10:19

+0

那麼你是在重新發明輪子嗎?很公平,我也是這樣做的。其核心內容「Forms Authentication」實際上非常簡單,它存儲了經過認證的用戶信息的加密烹飪。整個過程,包括存儲的信息以及如何存儲,都可以定製。使用會話狀態本質上是做同樣的事情,只有用戶信息存儲在服務器上。我真的會建議定製'Forms Authentication',而不是從頭開始。 – Nathan 2012-07-13 15:38:34

+1

如果你甚至不能自己開始,那麼你沒有寫你自己的認證系統的業務,你會執行它錯誤的。至少要實現系統內部構建,並弄清楚它是如何工作的。 – 2012-07-13 15:51:35

回答

1

在我看來,更好的方法是在加密的cookie的用戶信息,這樣,您的服務器不需要跟蹤會話的每個用戶的。它比會話更可靠。你可以做的是僅使用從FormsAuthentication創建安全身份驗證cookie的機制,並使用自己的授權。

public void OnLoginClick(object sender, EventArgs e) 
    { 
     if(MySqlValidUser(username, pass) // this is where you would check if user is valid 
     { 
      FormsAuthentication.SetAuthCookie(username, null); 
      Response.Redirect("/"); 
     } 
    } 

如果啓用了窗體身份驗證您可以輕鬆地訪問你的asp.net頁面

<authentication mode="Forms" /> 
+0

完美!今天的某個時候我會試試看看我能做些什麼。謝謝! – 2012-07-13 15:33:33

1

User.Identity.Name或User.IsAuthenticated這樣,有沒有更好的方式去關於跟蹤登錄用戶?

Microsoft設計了Forms Authentication以使用加密的Cookie,以及使用querystring的無Cookie後備。所以他們顯然認爲這比使用Session更好。

一個優點是,用戶不會被自動註銷,如果他的會話丟失(超時,但如果應用程序使用InProc會話時回收,也可以失去 - 這是默認的)。

如果你真的想「滾你自己」,我建議你考慮:

  1. 編寫自定義的MembershipProvider,將與FormsAuthentication基礎設施工作,但讓你學習一些有關的實施細則。

  2. 或學習的FormsAuthentication設計,並試圖複製大部分(例如:你可能會忽略對Cookie的身份驗證支持)。