訪問呼叫https 使用者訪問鑑權機制總結

2021-10-14 21:10:07 字數 2211 閱讀 6183

1、基於 session 的鑑權機制

傳統的訪問鑑權機制,使用者登入完成後,使用者資訊存放於服務端的 session 中,客戶端 cookie 中儲存 session id,每次請求會帶上 cookie,從而服務端可以通過 session id 獲取服務端 session 的使用者資訊,從而進行驗證。

這個模式問題在於伺服器是集群或者跨域的服務導向架構,就需要 session 資料共享,每台伺服器都要能夠讀取 session。

解決方式有集中話管理 session 資料,如持久話 session 資料或者 redis 快取 session 資料。各服務都從持久話服務或 redis 快取中獲取 session。

當然你也可以通過將 session 資料加密然後都儲存在 cookie 中(客戶端),每次請求過來時,解密這個請求帶過來的 cookie 資料,獲取到具體的 session 資料,這樣可以解決服務集群 session 無法

共享的問題,但無法解決跨域的問題。flask session 預設就是採用這種方式,session 資訊加密儲存在客戶端 cookie 中。

session 這種機制不完全適用於使用 api 呼叫的應用的 api 服務鑑權。

2、基於 token 的鑑權機制

token 機制,本質即是將原先 cookie 存放 session id,服務端根據每次請求獲取的 cookie 中 session id,找到服務端中儲存的對應 session 資訊的方式,改為 http 請求需要手動傳輸 token (正確登入後給予的令牌),服務端根據 token 獲取使用者的資訊,完成鑑權。

這種方式適用一切應用,且通過集中話管理 token 與使用者關聯資料,可以很好解決跨域及使用者資料集群無法共享的問題,當然你可以將使用者資料加密成 token 字串,這樣相當於使用者資料就存放在客戶端就不需要服務端集中話管理 token 與使用者關聯資料了。這也就引伸到下面的 jwt 了。

3、json web token

jwt 是一種開放標準,定義了一種資料格式,以及這個資料格式的產生方式,可以借助該資料方式在各服務間安全地傳輸資訊。

jwt 物件資料結構

header、payload 儲存的都是 json 物件,這裡已使用 base64url 加密成了一串字元。signature 是使用 header 中指明的演算法將 header.payload 加密成的一串字元,用於防資料篡改。

什麼時候使用 jwt ?

授權:這是使用 jwt 的最常見方案。一旦使用者登入,每個後續請求將包括jwt,從而允許使用者訪問該令牌允許的路由,服務和資源。單一登入是當今廣泛使用jwt的一項功能,因為它的開銷很小並且可以在不同的域中輕鬆使用。

資訊交換:json web 令牌是在各方之間安全地傳輸資訊的好方法。因為可以對jwt進行簽名(例如,使用公鑰/私鑰對),所以您可以確定發件人是他們所說的人。此外,由於簽名是使用標頭和有效負載計算的,因此您還可以驗證內容是否遭到篡改。(郵件驗證、簡訊驗證)

特點

1、token 中可以存放一些有用資訊,因而有效使用可以減少伺服器查詢資料庫的次數。

2、token 預設是不加密的(payload 存放資料只經過 base64url 加密可以很容易解密回來),因而不能在 token 中存放秘密資訊。獲取 token 就可以獲取該令牌的所有許可權(token 包含認證資訊),為了防止洩露造成的影響,token 的有效期應該設定較短。對於重要許可權需要使用者二次認證。

3、為防止盜用,建議傳輸使用 https。

4、oauth 2.0

什麼是 oauth ?

oauth(開放授權)是乙個開放標準協議,允許使用者授權第三方移動應用訪問他們儲存在另外的服務提供者上的資訊,而不需要將使用者名稱和密碼提供給第三方移動應用或分享他們資料的所有內容。

oauth 流程包含角色

使用者:有權訪問授權服務,獲取屬於自己的資源

應用:第三方應用,需要訪問授權服務獲取使用者的資源,但本身不具有訪問授權服務中資源的許可權

授權服務:儲存使用者資源的服務

3. 通過access_token進行介面呼叫,獲取使用者基本資料資源或幫助使用者實現基本操作。

3、通過 access token 獲取基本資料資源

參考

1、 2、

3、4、

訪問控制與鑑權設計

一.訪問控制二.呼叫引數 三.簽名sign原理 呼叫api時需要對請求引數進行簽名驗證,伺服器也會對該請求引數進行驗證是否合法的。方法如下 1 根據引數名稱 除簽名和 將所有請求引數按照字母先後順序排序 key value key value 例如 將foo 1,bar 2,baz 3 排序為bar...

public 等訪問權

一 訪問許可權 1 private 定義的屬性和方法只能在自己類中訪問 2 protected 受保護的訪問 在繼承中相當於public 在其他類中使用時private 3 default 預設的 不寫會自動新增 定義的屬性只能在同乙個包中訪問 即使是子包也不行 4 public 可以在不同的包中訪...

linux samba 使用者訪問 匿名訪問

1.配置檔案,使用者訪問 global workgroup workgroup 工作組 server string android samba v 描述 security user security share 匿名登陸 security user security domain windows域控...