本文主要講的是常用的登陸認證機制。隨手的筆記,可以快速了解這幾種認證方式的原理。
1、HTTP Basic Auth
HTTP Basic Auth ,簡單的來說就是每次請求API的時候,都提供用戶的username和password。
用這種方式可以不用登陸,隨時請求后台任何一個方法。但如何知道用戶是否擁有權限的?可以在每次請求任何一個方法時候,都攜帶用戶名和密碼,然后后台每次都對用戶名和密碼進行校驗,並且對角色進行校驗,之后再選擇是否放行。這就意味着每次都要做校驗。
缺點:容易泄密。只適用於內部使用。
2、Cookie Auth(也叫Session認證)
登陸請求,當服務端校驗通過之后,服務端會創建一個獨立的Session來保存用戶信息,以作為登陸成功的標記。每一個用戶創建一個Session對象。服務端存儲完session數據之后,那瀏覽器是如何知道該用戶登陸過?
首先服務端會將Session對象的id放入Cookie的對象里,Cookie對象是鍵值對 key=value,對應的鍵是名字,值是id,然后通過響應頭寫回給瀏覽器,瀏覽器會將響應頭信息自動存放到瀏覽器的緩存里。
用戶登陸成功后,若想訪問服務器端的其他需要權限的頁面時,該請求必須要攜帶瀏覽器之前存儲的session id ,也是通過請求頭的方式,session id到服務端后會搜索是否有該session id 所對應的對象,有就能拿到,說明用戶還處於登陸狀態。
spring-security的流程其實也是一套對上述流程的封裝,再到后來的整合CAS,依然還是此方式。
在分布式系統中,整合CAS的原因:
session認證的缺陷:利用服務器的內存資源來存儲session,而一台服務器的內存是不可以共享的,所以如果要多台服務器之間共享session,所以就有了CAS整合。其實這就是session共享的方案。
3、OAuth
OAuth(開放授權)是一個開放的授權標准,允許用戶讓第三方應用訪問該用戶在某一個web服務器上的私密資源,而無需將用戶名和密碼提供給第三方應用。
Auth 允許用戶提供一個令牌,而不是用戶名和密碼來訪問它們存放在特定服務器提供者的數據。每一個令牌授權一個特定的第三方系統,在特定的時間段內訪問特定的資源。

4、Token Auth
使用基於Token的身份驗證,在服務端不需要存儲用戶登陸信息。
流程:
1、客戶端使用用戶名和密碼請求登陸
2、服務端收到請求,去驗證用戶名和密碼
3、驗證完后,服務端會簽發一個Token(包含用戶信息的一個字符串),再把這個Token發送給客戶端
4、客戶端收到Token后存儲起來,比如存儲到Cookie又或者本地
5、客戶端每次向服務端請求資源時,需要攜帶服務端簽發的Token
6、服務端收到請求,然后去驗證客戶端請求里帶着的Token(使用算法驗證),驗證成功,就返回數據給客戶端。
其他服務器只要是使用同一套算法,就可以做信息的校驗,就不需要做所謂的session共享。
Token Auth 的優點
Token 機制相對於 Cookie 機制又有什么好處呢?
支持跨域訪問: Cookie 是不允許垮域訪問的,這一點對 Token 機制是不存在的,
前提是傳輸的用戶認證信息通過 HTTP 頭傳輸.
