常見登錄驗證機制


HTTP Basic Auth

HTTP Basic Auth 簡單點說明就是每次請求 API 時都提供用戶的 username 和 password,簡言之,Basic Auth 是最簡單的認證方式,只需提供用戶名密碼即可,但由於有把用戶名密碼暴露給第三方客戶端的風險,在生產環境下被使用的越來越少。因此,盡量避免采用 HTTP Basic Auth。

OAuth

OAuth(開放授權)是一個開放的授權標准,允許用戶讓第三方應用訪問該用戶在某一web服務上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。

OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的第三方系統(例如,QQ,微信)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容

OAuth2.0的流程:img

這種基於OAuth的認證機制適用於個人消費者類的互聯網產品,如社交類APP等應用,但是不太適合擁有自有認證權限管理的企業應用。

Cookie認證機制就是為一次請求認證在服務端創建一個Session對象,同時在客戶端的瀏覽器端創建了一個Cookie對象;通過客戶端帶上來Cookie對象來與服務器端的session對象匹配來實現狀態管理的。默認的,當我們關閉瀏覽器的時候,cookie會被刪除。但可以通過修改 cookie 的 expiretime 使cookie在一定時間內有效。

Token Auth

對於Token認證機制,簡單來說,就是每次客戶端輸入賬號密碼后向服務端發起登錄請求,服務端在通過登錄驗證后,給客戶端返回一個任意字符串,既token(token必須與用戶的賬戶關聯,如用userid和token形成鍵值對,保存在內存中(redis))。客戶端拿到這個token后,在之后所有需要驗證登錄的請求中,或者參數中帶上token或者在header中攜帶token,然后服務端根據接收到的token來驗證用戶的登錄狀態是否存在,是否有效。

出於安全考慮,token在每次登錄時重新生成,並可以設置有效期,每次有效操作后更新token的時間戳,保證token有效期往后延續。

為了避免token被截獲,偽造非法請求,在每次請求時,可以用userid+token+時間戳+密鑰+請求參數,進行簽名,服務端驗證token,同時驗證簽名,以保證請求的安全性。

Token於cookie機制:

多大的

Token Auth相對於Cookie機制的優點

  1. 支持跨域訪問:Cookie是不允許垮域訪問的,這一點對Token機制是不存在的,前提是傳輸的用戶認證信息通過HTTP頭傳輸。
  2. 無狀態(也稱服務端可擴展行):Token機制在服務端不需要存儲session信息,因為Token 自身包含了所有登錄用戶的信息,只需要在客戶端的cookie或本地介質存儲狀態信息。
  3. 更適用 CDN: 可以通過內容分發網絡請求你服務端的所有資料(如:javascript,HTML,圖片等),而你的服務端只要提供API即可。
  4. 去耦:不需要綁定到一個特定的身份驗證方案。Token可以在任何地方生成,只要在驗證登錄的API被調用的時候,進行Token生成調用即可。
  5. 更適用於移動應用:當你的客戶端是一個原生平台(iOS, Android,Windows 8等)時,Cookie是不被支持的(你需要通過Cookie容器進行處理),這時采用Token認證機制就會簡單得多。
  6. CSRF:因為不再依賴於Cookie,所以你就不需要考慮對CSRF(跨站請求偽造)的防范。
  7. 性能:一次網絡往返時間(通過數據庫查詢session信息)總比做一次 HMACSHA256 計算 的Token驗證和解析要費時得多。
  8. 不需要為登錄頁面做特殊處理:如果你使用Protractor做功能測試的時候,不再需要為登錄頁面做特殊處理。
  9. 基於標准化:你的API可以采用標准化的 JSON Web Token (JWT),這個標准已經存在多個后端庫(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM