2012-09-22 43 views
3

隨着BoilerplateJS的設置,推薦的處理授權和認證的方式是什麼?BoilerplateJS:處理授權和認證的推薦方式

很顯然,在服務器端你會檢查cookies等以知道誰登錄了。但是,在客戶端,你如何知道用戶是否登錄以及他們的用戶名等等是什麼?

+0

如果您在服務器端使用cookie,爲什麼不在客戶端使用它們? –

+0

如果我正確理解了ASP .NET Forms Authentication,那麼這個cookie就會被加密 - 在客戶端上有解密cookie的代碼會使應用程序變得脆弱。 – georgiosd

回答

6

我將分享如何在使用BoilerplateJS的其中一個項目中完成這項工作。在這個項目中,我們使用OAuth 2.0進行身份驗證。

  • 我們有一個單獨的登錄頁面,它不使用BoilerplateJS或複雜的JS。保持獨立的原因是驗證可能取決於URL重定向,而JS不能最好地處理。

  • 一旦用戶被正確驗證,我們會收到服務器會話的auth_token並將其存儲爲JS變量。我們使用全局Boiler.Context的'設置'來存儲這個令牌。由於設置被繼承到子上下文,我們可以從任何地方訪問它。

  • 爲了進行授權,我們然後下載了一個包含授權訪問密鑰的記錄用戶的簡單ACL。這些鍵僅用於客戶端驗證以顯示/隱藏控件。真正的授權是在後端服務上執行的。

  • 我們希望BoilerplateJS組件完全自包含,包括驗證它。因此,如果特定組件的視圖模型從服務器接收到未經授權的401 HTTP響應(未登錄或會話終止),則我們在此處呈現組件,而不將用戶重定向到登錄頁面。

  • 由於我們沒有重定向,用戶可以利用頁面上的其他信息,即使BoilerplateJS組件沒有主動顯示它的內容。我們在組件上顯示了一些錯誤信息,並提供了重新登錄的鏈接。

  • 這是通過我們創建的通用錯誤處理程序完成的。從component.js中,我們將錯誤回調函數傳遞給我們的視圖模型(您也可以在上下文中使用它)。視圖模型使用此回調函數來通知其中發生的任何錯誤。在401 HTTP代碼的情況下,調用此處理程序,要求component.js呈現帶有錯誤信息和重新登錄鏈接的UI。

  • 用戶單擊重新登錄URL返回登錄頁面。該URL包含對始發URL的反向引用,以便用戶能夠進入認證後的頁面。

+0

非常感謝。這太糟糕了,BoilerplateJS沒有「真實世界」的應用程序樣本 - 管道有點困難。例如,我不知道如何在發生401時集中管理渲染版本的控制,以便您不必每次都重新編寫錯誤控制。 – georgiosd

+0

看了這一點之後,我認爲用Sammy.JS的OAuth支持創建OAuth是有意義的。你怎麼看? – georgiosd

+0

我之前沒有使用過SammyJS。可能你應該爲Stackoverflow上的一個好的OAuth庫問一個單獨的問題?保持我們的最新狀態..我對使用OAuth的內容感到不滿意...... – Hasith