分為authentication登入許可權和authorization許可權。前者我們登入時的使用者密碼,錯誤時錯誤碼是401,後者是許可權,比如一些管理員才能操作的許可權,許可權不足報403,對應的描述是forbidden。
由於http是無狀態的,即我們在第一次請求中登入,第二次請求時並不能夠知道我們是登入過的,即第二次請求如何確保是第一次請求的客戶端發起的呢?目前主要有兩種方式。
session認證
session是存在server端的key,value的儲存結構,第一次請求登入,session會在記憶體中記錄乙個sid和對應的value,value記錄了使用者的資訊,然後將sid返回給使用者端,使用者端之後請求時就會將sid帶上,然後服務端就會根據sid到session當中找,之後便能找到使用者的資訊。此時的關鍵之處便是在於我們的cookie不能被別人獲取,因為我們的cookie當中記錄了session 的sid。
然而,由於session是記錄於服務端的,這就導致使用集群分布式的時候,由於使用不同的伺服器,在其他server上沒有sid便會出401,這時候需要另外想辦法來處理,比如使用共享server來記錄session等等。
authorization
是一種http header 有具體的格式要求 ,格式為 type ***x 即型別空格內容。
type分為兩種,一種是basic,另外一種是 bearer。
basic
basic會在每次請求的時候將使用者名稱與密碼,使用base64編碼後傳送一次。此時服務端當發現是basic的時候就會對內容進行解碼然後用:分隔使用者名稱與密碼,之後到資料庫當中認證。因為我們每次請求都在https上,比較正規,不會被抓包。由於每次請求都會帶著使用者名稱和密碼,也不用擔心分布式部署到多個伺服器時出現問題。缺點就是每次都要訪問資料庫,效率比較低。
bearer
bearer後面接的是token,token就是乙個令牌。比如在使用者登入時使用者名稱密碼認證完成,服務端通過將使用者資訊和一段服務端知道的文字採用對稱加密演算法加密後傳送給客戶端,客戶端在下一次請求時將token帶著,伺服器端就會對token進行解密。token不需要對資料庫進行查詢,依賴於加密演算法不被攻破作認證。
C LDAP認證登入
寫了乙個通用的認證類,請看 public class ldaphelper else if objdirectoryentry.properties null objdirectoryentry.properties.count 0 return false 檢測乙個使用者和密碼是否正確 uid c...
使用者登入認證
salt 用來跟原始密碼合在一起的乙個字串。原始密碼加上鹽值後組成乙個新的字串,然後用加密函式對其加密。使用者進入登入頁面登入,post提交資料到login方法,根據使用者名稱作為條件從資料庫查詢是否存在使用者名稱,不存在返回false,存在繼續驗證密碼是否正確,不正確返回false,當密碼驗證成功...
rest framework登入認證
class user models.model user models.charfield max length 32 pwd models.charfield max length 32 class usertoken models.model token models.charfield max...