基于JSON Web Tokens的单点登录(SSO)或通行证(Passport)系统方案
首先簡要介紹一下什么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的基本原理介紹完畢,接下來描述如何基于JWT設計單點登錄系統。
假設現在有系統www.example.com, passport.example.com.
用戶首先訪問passport.example.com,在表單輸入用戶名和密碼,通過HTTPS Post提交請求到后端認證服務,后端認證服務查詢用戶數據庫完成用戶認證。
用戶 認證成功后,假設只在Payload部分保存userid,生成Token ( Base64(header) + "." + Base64(payload) + "." + Base64(sign) ),作為cookie返回給客戶端,
cookie保存在根域example.com。
用戶訪問www.example.com,會自動帶上Token cookie。
后端服務需要完成Token的驗簽,過期時間判斷等操作。驗證成功就可以讀取Payload信息完成接下來的業務功能。
參考資料
https://jwt.io/
總結
以上是生活随笔為你收集整理的基于JSON Web Tokens的单点登录(SSO)或通行证(Passport)系统方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel提供的面向机器学习和深度学习的
- 下一篇: 基于Session共享的单点登录或通行证