我目前正在使用 ASP.NET Core 2.1 中的 KnockoutJS SPA 模板,并且我設法實現了與 Angular 中的授權流程完全相同的授權流程:https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login正如您在他們的用戶前端服務中看到的那樣,基本上唯一檢查用戶是否在客戶端登錄是檢查客戶端本地存儲中是否存在“auth_token”密鑰:https://github.com/mmacneil/AngularASPNETCore2WebApiAuth/blob/master/src/src/app/shared/services/user.service.tsthis.loggedIn = !!localStorage.getItem('auth_token');// ?? not sure if this the best way to broadcast the status but seems to resolve issue on page refresh where auth status is lost in// header component resulting in authed user nav links disappearing despite the fact user is still logged in簡而言之,任何人都可以打開瀏覽器本地存儲并使用“auth_token”密鑰插入一個隨機字符串,他們將能夠在 UI 中看到與管理員相關的所有內容(即使他們在 API 請求上會失?。?。有人可以為此建議更好的流程嗎?還是在“打開”管理頁面時向 API 發送“登錄請求”的唯一選項?PS 我對身份驗證方案方面比較陌生,JWT 可能不應該用于客戶端內容驗證嗎?
1 回答

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
考慮到 JWT 最佳實踐,您的所有驗證都應該在后端完成,因為您的 Web 應用程序中編碼的任何驗證都可以被您的任何客戶端讀取,從而導致巨大的安全漏洞:任何人都知道如何創建有效的 JWT為您的應用程序。
即使沒有任何數據,也能看到與管理員相關的 UI 是否是個大問題?考慮到所有可以返回敏感數據的路由都受到 JWT 授權的保護,如果用戶訪問需要數據的任何頁面或 UI 部分,他們會觸發檢索它的請求,這可能會返回 401(未授權) HTTP 狀態,或類似的。在這些情況下,常見的前端實踐是擦除客戶端用戶數據,并重定向到登錄頁面。
因此,典型的流程是:
用戶將偽造的訪問令牌插入到他們的存儲中
用戶打開一個以任何方式使用敏感數據的管理頁面/用戶界面(顯示、用于任何內部邏輯等)
Web 應用程序向 API 請求數據
API 返回一個將被解釋為授權錯誤的響應
Web 應用程序接收 API 響應,清除用戶訪問令牌并將其重定向到其登錄頁面
在大多數情況下,整個流程將發生得足夠快,足以阻止您的用戶進一步交互和探索您的 Web 應用程序。
如果您提供有關您的場景的更多信息會更好,這樣任何人都可以理解您的擔憂是否需要考慮并真正解決。但是,在大多數情況下,上述行為是可以接受的。
- 1 回答
- 0 關注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消