Json Web Token

JWT符合[RFC 7519]規範,它的優點在於可以取代Session和Cookie驗證的方式。屬於Token-Based的範疇。html

1. JWT的三段組成解析

header(頭部).payload(載荷).signature(簽名)

注:三個部分之間用英文句號.來分隔。web

{
    "typ": "JWT", #類型,代表是一個JWT字符串
    "alg": "HS256"  #加密算法
}

編碼後:算法

ewogICAgInR5cCI6ICJKV1QiLAogICAgImFsZyI6ICJIUzI1NiIKfQ==

通常Header只須要這兩個字段便可。數據庫

1.2_payload(關鍵的自帶信息)_

{
    "user_id":pzdn2009, #用戶Id,
    "name":"pzdn", #名稱
    "exp":1556999524 #token過期時間
}

編碼後:json

ewogICAgInVzZXJfaWQiOnB6ZG4yMDA5LCAKICAgICJuYW1lIjoicHpkbiIsIAogICAgImV4cCI6MTU1Njk5OTUyNCAKfQ==

payload用來承載要傳遞的數據,它的json結構其實是對JWT要傳遞的數據的一組聲明,這些聲明被JWT標準稱爲claims,它的一個「屬性值對」其實就是一個claim,每個claim的都表明特定的含義和做用。服務器

1.3_signature_

計算signature:編碼

HMACSHA256(base64(header)+"."+base64(payload),secret="mypasswordsdfasdfsddfjjcud")

最終header.payload.signature連成一串,就是JWT。加密

1.4 說明

  • nbf 定義在什麼時間以前,該jwt都是不可用的.
  • exp 過時時間
  • iss issuer 簽發者
  • aud audience 聽衆,能夠是scope,或者/resoures,表示接收jwt的一方
  • sub subject 主題,jwt所面向的用戶
  • jti jwt的惟一身份標識,主要用來做爲一次性token,從而回避重放攻擊。
  • iat jwt的簽發時間

2. token應用流程?

  • Login:用戶初次登陸,輸入用戶名密碼
  • 密碼驗證:服務器從數據庫取出用戶名和密碼進行驗證
  • 生成JWT:服務器端驗證經過,根據從數據庫返回的信息,以及預設規則,生成JWT
  • 返還JWT:服務器的HTTP RESPONSE中將JWT返還
  • 帶JWT的請求:之後客戶端發起請求,HTTP REQUEST HEADER的Authorizatio字段帶上JWT,或者URL後面帶上JWT

3. .NET 庫

官方:https://jwt.io/#libraries-iocode

4 .參考文獻

[基於Token的身份驗證——JWT]http://www.cnblogs.com/zjutzz/p/5790180.html
[~3種web會話管理的方式]http://www.cnblogs.com/lyzg/p/6067766.html#_label2jwt

相關文章
相關標籤/搜索