天天看點

java判斷使用者是否在某一個區域登入_使用 JWT 技術,簡單快速實作系統間的單點登入...

  • 一、JWT定義及其組成
  • 二、認證過程
  • 三、java代碼實作

單點登入(single sign on),簡稱sso。它的定義是多個應用系統間,隻需要登入一次就可以通路所有互相信任的應用系統。下面介紹用jwt技術如何來實作單點登入。

一、JWT定義及其組成

JWT(JSON WEB TOKEN)是一個非常輕巧的規範,這個規範允許我們使用jwt在用戶端和伺服器之間傳遞安全可靠的資訊。

JWT由3個部分組成,分别是頭部、載荷、簽名。

頭部部分

{
  "alg": "HS256",
  "typ": "JWT"
}
           

alg描述的是簽名算法。

載荷部分

{
  "iss": "發行者",
  "sub": 主題",
  "aud": “觀衆”,

  "exp":"過期時間",

  "iat":"簽發時間"

以下可以添加自定義資料

    "userid":"11111",

    “realname":"真實姓名",

    "email":"",
}
           

Base64算法是可逆的,不可以在載荷部分儲存使用者密碼等敏感資訊。如果業務需要,也可以采用對稱密鑰加密。

簽名部分

HMACSHA256(Base64(Header) + "." + Base64(Payload),  secret)
           

簽名的目的是用來驗證頭部和載荷是否被非法篡改。

驗簽過程描述:讀取Header部分并Base64解碼,得到簽名算法。根據以上方法算出簽名,如果簽名資訊不一緻,說明是非法的。

二、認證過程

下面我們從一個執行個體來看如何運用JWT機制實作認證:

登入

第一次認證:第一次登入,使用者從浏覽器輸入使用者名/密碼,送出後到伺服器的登入處理的Action層(Login Action);

Login Action調用認證服務進行使用者名密碼認證,如果認證通過,Login Action層調用使用者資訊服務擷取使用者資訊(包括完整的使用者資訊及對應權限資訊);

傳回使用者資訊後,Login Action從配置檔案中擷取Token簽名生成的秘鑰資訊,進行Token的生成;

生成Token的過程中可以調用第三方的JWT Lib生成簽名後的JWT資料;

完成JWT資料簽名後,将其設定到COOKIE對象中,并重定向到首頁,完成登入過程;

java判斷使用者是否在某一個區域登入_使用 JWT 技術,簡單快速實作系統間的單點登入...

請求認證

java判斷使用者是否在某一個區域登入_使用 JWT 技術,簡單快速實作系統間的單點登入...

基于Token的認證機制會在每一次請求中都帶上完成簽名的Token資訊,這個Token資訊可能在COOKIE 中,也可能在HTTP的Authorization頭中;

用戶端(APP用戶端或浏覽器)通過GET或POST請求通路資源(頁面或調用API);

認證服務作為一個Middleware HOOK 對請求進行攔截,首先在cookie中查找Token資訊,如果沒有找到,則在HTTP Authorization Head中查找;

如果找到Token資訊,則根據配置檔案中的簽名加密秘鑰,調用JWT Lib對Token資訊進行解密和解碼;

完成解碼并驗證簽名通過後,對Token中的exp、nbf、aud等資訊進行驗證;全部通過後,根據擷取的使用者的角色權限資訊,進行對請求的資源的權限邏輯判斷;

如果權限邏輯判斷通過則通過Response對象傳回;否則則傳回HTTP 401;

三、java代碼實作

1、使用者登入:

使用者登入驗證通過後添加以下代碼

String token = JwtUtil().generateToken(userName);
Cookie cookie = new Cookie("autotoken", token);
response.addCookie(cookie);
           

2、調用http請求

後續的http請求認證都帶上token

3、應用系統認證

編寫一個過濾器,對每一個請求進行解碼認證

String authToken = request.getHeader(this.tokenHeader);
 if (jwtTokenUtil.validateToken(authToken) {

 }
           
來源:http://rrd.me/enqP7
作者:君之見
           

:-D 搜尋微信号(ID:

芋道源碼

),可以獲得各種 Java 源碼解析、原理講解、面試題、學習指南。

:-D 并且,回複【

書籍

】後,可以領取筆者推薦的各種 Java 從入門到架構的 100 本書籍。

:-D 并且,回複【

技術群

】後,可以加入專門讨論 Java、後端、架構的技術群。

java判斷使用者是否在某一個區域登入_使用 JWT 技術,簡單快速實作系統間的單點登入...

繼續閱讀