2014-09-30 163 views
0

我正在使用陶醉來構建我的Web應用程序並嘗試寫入驗證模塊。 我完成了註冊部分,現在正在寫部分簽名。 我讀了關於The definitive guide to form-based website authentication的安全部分,並將使用此建議。Web應用程序登錄系統

我真的不知道的是,如何登錄作品。我拍攝的過程是這樣的:

  1. 用戶寫入用戶名和密碼的HTML表單,並按下登錄
  2. 服務器收到請求,控制器會檢查,如果用戶信息匹配與數據庫中的數據。
  3. 如果是,如何繼續。

第三點是我住的地方。但我有一些想法,如果是正確的方式,怎麼可能工作和不確定。

因此,當登錄信息與數據庫匹配時,我會在會話對象(hash數據類型)鍵值對signed_in中設置:true。每當用戶向Web應用程序發出請求時,都需要進行身份驗證,如果signed_in爲true或真,我會查看會話對象。

這是我會做的,但正如我上面提到的,我不知道這是否是正確的方法。

+0

嗯,它[看起來](https://github.com/revel/revel/pull/458)auth沒有充分充實在狂歡 – RickyA 2014-09-30 15:29:07

+0

這就是主意。您可能還想在會話中添加標識用戶的內容。 – twotwotwo 2014-09-30 17:47:19

回答

0

是的,像@twotwotwo提到的,給它的用戶ID和角色。

所以服務器側渲染流程:步驟1

  • 用戶發送用戶名(或其它標識符)和密鑰。使用scrypt或bcrypt祕密
  • 在數據庫
  • 是否匹配你創建一個結構或地圖
  • 連載結構或映射到字符串(JSON,msgpack,採空區)
  • 與存儲的鹽漬哈希檢查
  • 用AES https://github.com/gomango/utility/blob/master/crypto.go(例如)加密字符串。設置全局AES密鑰。
  • 創建一個唯一的cookie(或會話)標識符(密鑰)
  • 商店標識符和原始結構或地圖數據庫
  • 發送加密的cookie出(ID = encrypted_struct_or_map又名加密的字符串)

在受保護的資源(或頁面):步驟從餅乾,如果ID在DB存在

  • 檢查2

    • 讀取識別符使用AES密鑰
    • 解碼cookie值比較來自cookie的值與存儲的值
    • 如果user.role == 「allowed_to_access_this_resource」 渲染
    • 否則http.ResponseWriter。WriteHeader(403)或重定向到登錄頁面

    現在,如果你想你也可以有一個應用程序範圍內的RSA密鑰和加密cookie值標誌的RSA私鑰(步驟1)將字符串之前。在步驟2中用AES密鑰解碼,檢查簽名是否有效,然後將內容與db存儲的內容進行比較。

    任何更改都必須更新cookie值(結構/映射)和數據庫中的信息。