可以的 以便提高業務處理效率 眾所周知JWT協議RFC7519使用Base64Url對Header和Payload的Json字串進行編解碼。A JWT is represented as a sequence of URL-safe parts separated by period (".") characters. Each part contains a base64url-encoded value.
不幸地的是Base64Url編碼方式不是加密手段。任何得到JWT的人都可以使用公開的解碼方式將JWT的原文解析出來。所以很多介紹JWT的文章都提醒不要在JWT中攜帶敏感資訊。但是在特定業務場景下,如果JWT中含有某些關鍵資訊,就可以節省後臺很多額外操作,例如資料庫查詢、服務介面訪問等。進而縮短後臺響應時間,改善使用者體驗。
既然在JWT中攜帶敏感資訊能帶來這麼大的好處,那麼花點精力實現這個功能看起來是值得的。提到敏感資訊的保密,自然會想到加密和解密。將敏感資訊的密文放入JWT中,即使JWT洩露,由於沒有金鑰,獲得JWT的人也無法對其進行解密。而伺服器端只要增加一個解密過程就能提取出敏感資訊,提高後續業務處理效率。
加密演算法主要分兩大類:對稱加密和非對稱加密。因為JWT是由服務端建立,客戶端轉手後又發回服務端使用。所以加密和解密都發生在服務端,不涉及到金鑰的分發,相較其他加密場景要簡單很多。所以我選擇了加解密運算速度快的對稱加密演算法AES作為敏感資訊的加密方式。
專案中使用JJWT java庫建立和校驗JWT,將AES加解密過程放入對JJWT封裝的介面中。複用建立JWT的數字簽名金鑰作為AES的加密金鑰和初始向量。加解密過程對呼叫者是透明的
可以的 以便提高業務處理效率 眾所周知JWT協議RFC7519使用Base64Url對Header和Payload的Json字串進行編解碼。A JWT is represented as a sequence of URL-safe parts separated by period (".") characters. Each part contains a base64url-encoded value.
不幸地的是Base64Url編碼方式不是加密手段。任何得到JWT的人都可以使用公開的解碼方式將JWT的原文解析出來。所以很多介紹JWT的文章都提醒不要在JWT中攜帶敏感資訊。但是在特定業務場景下,如果JWT中含有某些關鍵資訊,就可以節省後臺很多額外操作,例如資料庫查詢、服務介面訪問等。進而縮短後臺響應時間,改善使用者體驗。
既然在JWT中攜帶敏感資訊能帶來這麼大的好處,那麼花點精力實現這個功能看起來是值得的。提到敏感資訊的保密,自然會想到加密和解密。將敏感資訊的密文放入JWT中,即使JWT洩露,由於沒有金鑰,獲得JWT的人也無法對其進行解密。而伺服器端只要增加一個解密過程就能提取出敏感資訊,提高後續業務處理效率。
加密演算法主要分兩大類:對稱加密和非對稱加密。因為JWT是由服務端建立,客戶端轉手後又發回服務端使用。所以加密和解密都發生在服務端,不涉及到金鑰的分發,相較其他加密場景要簡單很多。所以我選擇了加解密運算速度快的對稱加密演算法AES作為敏感資訊的加密方式。
專案中使用JJWT java庫建立和校驗JWT,將AES加解密過程放入對JJWT封裝的介面中。複用建立JWT的數字簽名金鑰作為AES的加密金鑰和初始向量。加解密過程對呼叫者是透明的