1. 程式人生 > 資訊 >外媒測試 Xbox Series X 遊戲載入時長:《極限競速 7》29 秒、《Apex 英雄》28 秒

外媒測試 Xbox Series X 遊戲載入時長:《極限競速 7》29 秒、《Apex 英雄》28 秒

  1. JWT原則

#JWT的本質:把使用者資訊通過加密後生成的一個字串
JWT的原則是在伺服器身份驗證之後,將生成一個JSON物件並將其傳送回用戶
{
'UserName':'Chongchong',
'Role':'Admin',
'Expire':'2018-08-08 20:00:00'
}

之後,當用戶與伺服器通訊時,客戶在請求中發回JSON物件,伺服器僅依賴於這個JSON物件來標識使用者。
為了防止使用者篡改資料,伺服器將在生成物件時添加簽名(有關詳細資訊,請參閱下文)。
伺服器不儲存任何會話資料,即伺服器變為無狀態,使其更容易擴充套件。
  1. JWT的資料結構

1.JWT頭:一個描述JWT元資料的JSON物件
2.有效載荷:七個預設欄位+自定義私有欄位
3.簽名 = HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

  1. JWT頭

base64UrlEncode(header)-->字串
#JWT頭部分是一個描述JWT元資料的JSON物件,通常如下所示。
{
'alg':'HS256',
'typ':'JWT'
}
#alg屬性表示簽名使用的演算法,預設為HMAC SHA256(寫為HS256)
#typ屬性表示令牌的型別,JWT令牌統一寫為JWT
#使用base64 URL演算法將上述JSON物件轉換為字串儲存
  1. 有效載荷

#base64UrlEncode(payload)-->字串
#有效載荷部分是JWT的主體內容部分,也是一個JSON物件,包含需要傳遞的資料。JWT指定七個預設欄位供選擇。
'''
iss: 發行人
exp: 到期時間
sub: 主題
aud: 使用者
nbf: 在此之前不可用
iat: 釋出時間
jti: JWT ID用於標識改JWT
'''

#除以上預設欄位外,我們還可以自定義私有欄位
{
'sub':'1234567890',
'name':'chongchong',
'admin':true
}

#注意
預設情況下JWT是未加密的,任何人都可以解讀其內容,因此不要構建隱私資訊欄位,存放保密資訊,以防止資訊洩露。
JSON物件也使用Base64 URL演算法轉換為字串儲存。
  1. 簽名雜湊

# 簽名 = HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

1. 簽名雜湊部分是對上面兩部分資料簽名,通過指定的演算法生成雜湊,以確保資料不會被篡改。
2. 首先,需要指定一個密碼(secret),該密碼僅僅為儲存在伺服器中,並且不能向用戶公開。
3. 然後,使用標頭中指定的簽名演算法(預設情況下為HMAC SHA256)根據以下公式生成簽名。
4. HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
5. 在計算出簽名雜湊後,JWT頭,有效載荷和簽名雜湊的三個部分組合成一個字串,每個部分用"."分隔,就構成整個JWT物件。
  1. JWT核心

1. 給使用者頒發的token值相當於一把鎖,伺服器端的祕鑰相當於一把鑰匙。
2. 每次客戶端請求都會攜帶這把鎖,伺服器端用祕鑰去開這把鎖,如果無法開啟就證明是偽造的
  1. JWT特點分析

1. JWT的最大缺點是伺服器不儲存會話狀態,所以在使用期間不可能取消令牌或更改令牌的許可權,一旦JWT簽發,在有效期內將會一直有效。
2. JWT本身包含認證資訊,因此一旦洩露,任何人都可以獲得令牌的所有許可權。
3. 為了減少盜用和竊取,JWT不建議使用HTTP協議來傳輸程式碼,而是使用加密的HTTPS協議進行傳輸。
4. JWT不僅可以用於認證,還可用於資訊交換,善用JWT有助於減少伺服器請求資料庫的次數。