簡體   English   中英

ASP.NET Core SPA中基於JWT的身份驗證-前端驗證

[英]JWT-based authentication in ASP.NET Core SPA - front-end validation

我目前正在使用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.ts

this.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進行客戶端內容驗證?

考慮到JWT的最佳實踐,您的所有驗證都應在后端進行,因為您的任何客戶端都可以讀取Web應用中編碼的任何驗證,從而導致巨大的安全漏洞:任何人都知道如何創建有效的JWT為您的應用程序。

即使沒有任何數據也可以查看與管理員相關的用戶界面,這是一個大問題嗎? 考慮到所有可以返回敏感數據的路由均受到JWT授權的保護,如果用戶訪問用戶界面中需要數據的任何頁面或部分,他們將觸發請求以檢索數據,這很可能會返回401(未經授權) HTTP狀態或類似狀態。 在這些情況下,常見的前端實踐是擦除客戶端用戶數據,然后重定向到登錄頁面。

因此,典型的流程為:

  • 用戶將偽造的訪問令牌插入其存儲中
  • 用戶打開一個管理頁面/用戶界面,該頁面以任何方式使用敏感數據(顯示,用於任何內部邏輯等)
  • Web應用程序對API發出請求,請求數據
  • API返回的響應將被解釋為授權錯誤
  • Web應用程序收到API響應,刪除用戶訪問令牌並將其重定向到其登錄頁面

在大多數情況下,整個流程將以足夠快的速度發生,以阻止您的用戶進一步進行交互並瀏覽您的Web應用程序。

如果您提供有關您的方案的更多信息會更好,這樣任何人都可以理解,如果您的擔憂是需要考慮並真正解決的。 但是,在大多數情況下,可以接受上述行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM