令牌的設計與實現

令牌內容的構成

令牌內容的第1、2、3、五部份內容長度是固定的,第四部份內容可根據應用的實際須要進行擴充,除了存儲用戶信息以外,還能夠存儲其餘與應用相關的信息,具備較強的可擴充性,避免了因固定長度帶來令牌可擴充性的限制。算法

令牌內容的加密和解密

  爲了保證令牌在傳遞過程當中的安全,必須對原始令牌的內容進行加密,本文對令牌中的校驗信息使用不可逆加密算法,防止校驗令牌在傳輸過程當中被截 取並篡改;用戶信息使用對稱加密算法,以便其餘系統的解密。目前採用了AES、SHA-一、Base64等三種加/解密算法,經過這三種加/解密算法保證 數據的安全。數組

  AES加密算法用於加密用戶信息及生成的令牌;SHA-1算法用於計算用戶密碼和令牌的校驗和;Base64將AES加密後的令牌編/解碼。安全

加密流程

  令牌加密流程首先按令牌內容結構填充內容,計算內容的校驗和後填充到校驗和內容區。加密流程圖如圖2。編碼

1. 將版本號、當前用戶登陸時間、會話失效時間和用戶登陸信息按照令牌各部分所屬位置進行填充。

2. 系統A中的用戶密碼在註冊時已經將用 戶登陸密碼使用MD5加密,就再也不使用AES加密算法對用戶登陸密碼加密,直接使用SHA-1計算出用戶登陸密碼的校驗和(記爲D1),填充到令牌數組的 最後20位裏。

3. 因爲直接將密碼的校驗和發送給客戶端將帶來安全性的問題,本應用中將使用SHA-1再次計算整個令牌數組的校驗和(記爲D2),獲得 一個新的20位數組,並填充到原令牌數組裏的最後20位裏,用校驗和D2驗證令牌在傳遞過程當中是否被篡改,如同電子指紋的做用。

4. 使用AES加密算法 對令牌數組進行加密,再使用Base64算法進行編碼獲得令牌,在系統之間傳輸的便是此令牌。

解密流程

  令牌解密流程較加密流程複雜一些,過程與令牌加密流程相反,增長了令牌內容校驗和與接收的校驗和比較,以比較結果做爲令牌是否被篡改的依據。解密流程圖如圖3。加密

1. 使用Base64算法解碼,再使用AES解密算法對解碼後的數組進行解密。
2. 取出解密令牌數組的最後20位(記爲D1)。同時獲取 系統B中存儲的經MD5加密的用戶密碼,使用SHA-1計算校驗和,填充到解密令牌數組的最後20位裏,再次使用SHA-1計算整個令牌數組的校驗和(記 爲D2)。
3. 比較D1和D2是否一致,若是不一致則說明令牌在傳遞過程當中被篡改,跳轉到系統B的登陸頁面從新登陸;若是一致則完成後續的登陸校驗,跳 轉到系統B的應用界面。

令牌的集成應用

用戶首先從系統A登陸,後臺驗證無誤後按照加密流程生成當前用戶的SSO令牌。用戶從系統A切換到系統B時,提交到系統B的登陸模塊中的信息中包含由系統A生成的SSO令牌,系統B按照解密流程對SSO令牌解密,驗證無誤後由系統B完成登陸並跳轉到系統B的應用界面。code

相關文章
相關標籤/搜索