您好,登錄后才能下訂單哦!
本篇內容介紹了“前后端分離及認證選擇的方式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
什么是前后端分離?為什么要前后端分離?
前后端分離,說的更多的是一種架構上的概念。在傳統的web架構中,比如經典的MVC,會分數據層、邏輯層、視圖層。這個視圖層即我們所說的前端了,映射到代碼層面,就是html、js、css等代碼文件。數據層和邏輯層更多的是后端部分,例如我們的 .java 、.go、.py等文件。這些文件會在一個工程中,并不會單獨的開發、測試、部署。
在前后端分離的架構中,前端和后端是分開的,分別在不同的工程中。前端有專門的前端開發人員來進行開發、測試,后端則有后端開發人員來進行開發、測試,他們之間通過API來交互。
前后端分離有這么幾個好處:
1/ 解耦了前后端的工作人員 讓前端和后端分別交給更擅長的人來做,細化了工種,可以更加的專精。前端人員來關心用戶體驗、UI設計、交互渲染;后端人員更關注業務邏輯、性能保障、安全等方面。在項目進度方面,前后端可以并行開發,而互不影響,加快了整體的項目進度。
2/ 解耦了前后端的代碼 后端只需提供API服務,不再與靜態文件交互。后端可以使用更復雜的分布式、微服務架構,提供更好的性能和穩定性保障。同時前端除了PC端之外,移動端也可以使用相同的一套后端服務。
看到這里,前后端分離被廣泛應用也可以理解了。
大家需要注意,并不是所有的項目都需要前后端分離,像是大型的項目,開發人員很多,人員分工明確,這種團隊配置下,使用前后端分離可增加工作效率提高系統質量。但是團隊人員少,分工不那么明確的情況下,再采用前后端分離的架構,只會增加開發成本和系統復雜度。前后端分離是一個好的架構思路,但是需要看具體的業務和人員情況,切勿盲目的跟從。
前后端分離常用的認證方式
前后端分離中前后端的交互是通過API進行的,那么其中的認證是少不了的。前后端分離中常用的認證方式有下面幾種:
Session-Cookie
Token 驗證
OAuth(開放授權)
Session-Cookie 方式
Session-Cookie 方式是我們開發web應用時最常用的認證方式。它的認證過程一般是這樣的:
1/ 用戶瀏覽器向服務器發起認證請求,將用戶名和密碼發送給服務器。
2/ 服務器認證用戶名和密碼,若通過則創建一個session對話,并將用戶信息保存到session中。session的信息可以是保存到服務器文件、共享外部存儲、數據庫等存儲中,等下次請求時查詢驗證使用。
3/ 服務器會將該session的唯一標識ID,返回給用戶瀏覽器,并保存在cookie中。
4/ 用戶請求其他頁面時,瀏覽器會自動將用戶的cookie攜帶上,并發起接口請求,服務端收到請求后,從cookie解析出sessionID, 根據這個sessionID 查詢登錄后并保存好的session,若有則說明用戶已登錄,放行。
該方式是MVC架構中最常用的認證方案,在前后端分離中也是可以用的。幾乎所有的Web框架都默認集成了Session-Cookie的認證方式,而且對Session-Cookie方式的安全性和穩定性方面都有很成熟的處理方案。
當前端代碼使用后端web框架當做web容器驅動時,Session-Cookie 方案可作為首選的認證方案。
Token 方式
Token 方式是不同系統交互、前后端架構常用的認證方式。Token 方式的認證流程如下:
1/ 用戶使用用戶名和密碼登錄,將用戶名和密碼發送給服務器。
2/ 服務器驗證用戶名和密碼,若正確,則簽發token,返回給用戶。
3/ 用戶收到token后,將其存儲起來,web服務一般為localStrage 或cookie。
4/ 用戶請求其他資源頁面時,會攜帶token,一般放到header 或參數中,發送給服務端。
5/ 服務器收到后,驗證token,判斷用戶的正確性。
JWT(JSON Web Token)是最常用的一種Token認證方式,已成為Token認證的標準事實。JWT 方式將Token 分段,使其可以保持少量數據,還增加了簽名驗證,確保了token的安全性。JWT 網上介紹的資料很多,這里不再贅述。不了解的,可參考下邊這些資料:
JSON Web Token 入門教程
JWT官網
OAuth 方式
OAuth(Open Authorization)是一個開放標準,允許用戶授權第三方網站訪問他們存儲在服務端的用戶信息。我們常見的的QQ、微信等第三方登錄便是Auth認證方式。OAuth協議有1.0和2.0兩個版本。相比較1.0版,2.0版整個授權驗證流程更簡單更安全,也是目前最主要的用戶身份驗證和授權方式。
OAuth更像是一種授權機制。數據的所有者告訴系統,同意授權第三方應用進入系統,獲取這些數據。系統從而產生一個短期的進入令牌(token),用來代替密碼,供第三方應用使用。
在單純的前后端分離系統中,OAuth并不是常用的方式,它更多的應用在不同系統之間的授權交互。
對比思考
刨去不常用的OAuth,這里對比兩種前兩種常用的認證方式 JWT Auth 和 Session-Cookie Auth ,到底誰才是前后端分離認證的最佳實踐呢。從下面幾個方向分析比對。
可擴展性
Session-Cookie 是有狀態的服務,在服務端保存了session的信息。當服務端擴容的時候,需要考慮到session的共享問題,這個問題已有成熟的解決放方案,可使用session復制、共享、持久化等方式解決,大多數的分布式Web框架已經集成了處理方案。JWT 驗證方式是無狀態的服務,服務端可隨意擴縮容。
Session-Cookie 方式基于Cookie,也就是必須是瀏覽器或支持Cookie的瀏覽器封裝的框架,純移動端無法使用。JWT 不同,不依賴Cookie, 只要在本地可存儲即可。
安全性
Web開發中常見的兩個安全問題 XSS(跨站點腳本攻擊) 和 CRSF (跨站點請求偽造)。前者利用注入腳本到用戶認證網站上,執行惡意腳本代碼。后者則利用瀏覽器訪問后端自動攜帶cookie的機制,來跨站偽造請求。XSS 只要我們對注入端,進行過濾、轉義就能解決,CRSF 是我們重點關注的。
在Session-Cookie認證方式中,因為把SessionID保存在了Cookie中,很容易引起CRSF攻擊。在大多數的WEB框架中有集成解決方案,如Django 的csrftoken 、Beego的xsrfToken 等。在使用Session-Cookie方案時建議開啟web框架的csrf功能。
JWT 認證,可以把Token存放在Cookie或localstorage。建議存在localstorage,這樣就徹底避免了 CRSF 攻擊。
另外JWT有幾個安全性的問題,需要注意:
1/ JWT是明文編碼 JWT 的編碼是明文Base64的一個編碼,是可以反編譯的。在使用JWT傳輸信息的時候,不要放置重要敏感信息,最好使用https。
2/ JWT 泄露問題 解決JWT的泄露問題是一個平衡的問題。有三種處理方式由輕到重,看你業務重要性酌情選擇:
將JWT 的過期時間設置的很短,即使泄露也無關緊要。
在服務端設計JWT的黑名單機制,將泄露的Token 加黑名單即可。
保存簽發的JWT,當JWT泄露時,直接設置失效。
性能
Session-Cookie方案,因為后端服務存儲了Session信息,在認證的時候需要查詢,當有大量認證的時候是非常耗費資源的。JWT 可以把信息放到token中,只需要驗證解碼,使用簽名驗證token即可,相對來說效率會有提升。
從上面三個方面,我們分析了Session-Cookie和JWT 方式各自的優缺點,和面對問題的一些應對方案。相信大家會有自己的心里選擇。
拋開業務場景談技術都是耍流氓。不同的業務場景,不同的架構設計,適用的認證方式也是不同的。這里按我自己的經驗總結了下,什么情況下該使用那種認證方式,大家可參考。
適用Session-Cookie認證方案的情況:
項目只有web端的情況;
項目人員配置少,且前后端開發都會參與;
項目前后端分離不徹底,前端使用后端web框架作為服務容器啟動;
使用 JWT 認證方案的情況:
項目人員配置充足,分工明確;
項目除web端外還有移動端;
臨時的授權需求;
純后端系統之間的交互。
“前后端分離及認證選擇的方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。