一、簡介html
經過前文知道了Identity Server4的基本用途,如今必須瞭解一些實現它的基本細節.算法
二、關於服務端生成Token令牌服務器
頭部(Header):負載均衡
{
「typ」: 「JWT」, //token的類型
「alg」: 「HS256」 //Token使用的加密算法
}
將頭部使用Base64編碼可獲得以下個格式的字符串:ui
eyJhss6iOaaJIUasddasd
有效載荷(用戶信息等關鍵信息):編碼
{ 「iss」: 「Online JWT Builder」, //token的簽發者 「iat」: 666666, //簽發時間 「exp」: 66666, //過時時間 ……. 「userid」:10001 //用戶Id
//下面能夠繼續編寫用戶信息,但不能存放敏感信息 }
有效載荷也使用Base64編碼獲得以下格式的字符串:加密
eyJhss6iOaaJIUasddasd
接着將Header和Playload拼接生成一個字符串「eyJhss6iOaaJIUasddasdeyJhss6iOaaJIUasddasd」,使用HS256算法對該字符串進行加密,獲得的字符串在經過咱們提供的密鑰(secret,服務器本身提供的一個字符串)對字符串進行證書籤名字符串,最終獲得一個包含頭部信息(Base64字符串)和有效載荷(用戶信息等Base64字符串)和一個進行層層加密的簽名字符串組成的一個JWTtokenspa
三、關於服務端如何解密令牌code
當用戶登錄成功後,繼續訪問頁面,那麼會帶上這個token,服務端拿到token以後,對頭部信息和有效載荷在進行一次HS256算法和使用當前用戶對應的密鑰進行一次簽名,判斷這個簽名是否和token中的簽名是否一致,就能夠判斷這個token是否有效.由於密鑰存在咱們服務器上,別人不可能能僞造.htm
四、Token的優勢
不用保存在服務器,Session須要保存在服務器,並且Session不能跨服務器,只能保存在一臺服務器上,因此當用戶登錄了這個站點,那麼作了負載均衡後,下次訪問必須仍是訪問這個站點,因此可擴展性強比較靈活.