無狀態登入

2021-10-07 23:29:40 字數 1476 閱讀 8646

有狀態服務,即服務端需要記錄每次會話的客戶端資訊,從而識別客戶端身份,根據使用者身份進行請求的處理,典型的設計如tomcat中的session。

例如登入:使用者登入後,我們把登入者的資訊儲存在服務端session中,並且給使用者乙個cookie值,記錄對應的session。然後下次請求,使用者攜帶cookie值來,我們就能識別到對應session,從而找到使用者的資訊。

缺點:

• 服務端儲存大量資料,增加服務端壓力

• 服務端儲存使用者狀態,無法進行水平擴充套件

• 客戶端請求依賴服務端,多次請求必須訪問同一臺伺服器

微服務集群中的每個服務,對外提供的都是rest風格的介面。而rest風格的乙個最重要的規範就是:服務的無狀態性。即:

• 服務端不儲存任何客戶端請求者資訊

• 客戶端的每次請求必須具備自描述資訊,通過這些資訊識別客戶端身份

好處

• 客戶端請求不依賴服務端的資訊,任何多次請求不需要必須訪問到同一臺服務

• 服務端的集群和狀態對客戶端透明

• 服務端可以任意的遷移和伸縮

• 減小服務端儲存壓力

無狀態登入流程:

• 當客戶端第一次請求服務時,服務端對使用者進行資訊認證(登入)

• 認證通過,將使用者資訊進行加密形成token,返回給客戶端,作為登入憑證

• 以後每次請求,客戶端都攜帶認證的token

• 服務端對token進行解密,判斷是否有效

流程圖:

整個登入過程中,最關鍵的點是什麼?

token的安全性

token是識別客戶端身份的唯一標識,如果加密不夠嚴密,被人偽造就完蛋了。

採用何種方式加密才是安全可靠的呢?

jwt + rsa非對稱加密

jwt(json web token),是json風格輕量級的授權和身份認證規範,可實現無狀態、分布式的web應用授權。

jwt的資料格式

jwt包含三部分資料:

• header:頭部,通常頭部有兩部分資訊:

○ 宣告型別,這裡是jwt

我們會對頭部進行base64編碼,得到第一部分資料

• payload:載荷,就是有效資料,一般包含下面資訊:

○ 使用者身份資訊(注意,這裡因為採用base64編碼,可解碼,因此不要存放敏感資訊)

○ 註冊宣告:如token的簽發時間,過期時間,簽發人等

這部分也會採用base64編碼,得到第二部分資料

• signature:簽名,是整個資料的認證資訊。一般根據前兩步的資料,再加上服務的金鑰(secret)(不要洩露,最好週期性更換),通過加密演算法生成。用於驗證整個資料完整性和可靠性

生成的資料格式:token == 個人證件 jwt == 個人身份證

可以看到分為3段,每段就是上面的一部分資料

無狀態登入原理

1.1.什麼是有狀態?有狀態服務,即服務端需要記錄每次會話的客戶端資訊,從而識別客戶端身份,根據使用者身份進行請求的處理,典型的設計如tomcat中的session。例如登入 使用者登入後,我們把登入者的資訊儲存在服務端session中,並且給使用者乙個cookie值,記錄對應的session。然後...

無狀態登入配置 單點登入 JWT

多系統,單一位置登入,實現多系統同時登入的一種技術。常出現在網際網路應用和企業級平台中。單點登入一般是用於互相授信的系統,實現單一位置登入,全系統有效的。session 1 跨域 ip,埠,主機名,網域名稱任意乙個不同的時候都稱為跨域,訪問不同的域時cookie不一樣 通過設定cookie的doma...

無狀態登入Token過期時間問題

如果設定了過期時間,使用者持續訪問,那麼這個時間應該做處理 乙個好的模式是在它過期之前重新整理令牌。將令牌過期時間設定為一周,並在每次使用者開啟web應用程式並每隔一小時重新整理令牌。如果使用者超過一周沒有開啟過應用程式,那他們就需要再次登入,這是可接受的web應用程式ux 使用者體驗 要重新整理令...