JWT

JWT實現單點登陸

1 JWT的基本概及基礎應用場景

本質--規範

​ Json Web Toke是一種輕巧的規範,容許咱們在用戶和服務器之間傳遞可靠的信息。html

​ 是一個自我認證的記號,可以包含用戶標識、角色和用戶權限等信息,可以被任何人方便解析和使用安全的key實現驗證web

基本組成

  • 頭部算法

    頭部(header):用於描述這個JWT的基本信息,通常必須包括類型及所用的加密算法,表示成一個Json對象,而後經過編碼將其轉換成一個字符串。spring

    {
      "typ":JWT,
      "alg":"HS256"
    }
  • 負載(payload or claims):幫助接受JWTde服務器理解這個JWT,一下五個字段由標準定義,最後經過編碼將其裝換爲一個字符串。數據庫

    • iss:該JWT的簽發者
    • sub:該JWT所面向的用戶
    • aud:接收該JWT的一方
    • exp:(expires)何時過時,通常是一個時間戳
    • iat:(issued at)在何時簽發的
    {
        "iss": "John Wu JWT",
        "iat": 1441593502,
        "exp": 1441594722,
        "aud": "www.example.com",
        "sub": "jrocket@example.com",
        "jti": JWT惟一標識. 能用於防止 JWT重複使用,一次只用一個token
        "from_user": "B",
        "target_user": "A"
    }
  • 簽名(signature):經過.將其負載和頭部鏈接在一塊兒而後將其進行加密,而後將加密事後的字符創拼接在頭部和負載的後面頭部.負載.簽名json

    • 最後經過URL將其傳遞出去

服務器解析URL

服務器經過在頭部 負載 中記錄的加密算法對內容在一次編輯,若是獲得的信息與簽名 所記錄的不同證實這個信息被改動過,那麼咱們就該拒絕這個Token瀏覽器

JWT的適用場景

適用web間傳遞一些不敏感的信息安全

JWT使用教程

2 JWT實現單點登陸

單點登陸

1。登陸認證

  • 用戶經過表單將用戶名密碼等發送到服務器請求驗證數據庫比對 ,經過SSL(https 協議)加密。服務器

  • 若是認證經過,使用JWT將字符Token以Cookie的形式返回給用戶dom

    • 經過HTTPOnly 屬性來防止Cookie 被js讀取,從而避免跨站腳本攻擊xss攻擊

    Set-Cookie:jwt = header .payload .Signature;HttpOnly;

  • 用戶每次訪問的時候將JWT帶上,服務器經過解析JWT來驗證Token

    • 簽名是夠有效
    • token是否過時
    • 接受方是不是我
    • token是否被篡改過。。。

    而後回到了JWT的解析部分,在payload 中拿到了用戶的信息,從而響應相應的請求

2。同步問題

​ 因爲用戶的狀態數據是存儲在用戶的瀏覽器上的,因此就沒有Session須要共享數據對的問題,只須要在含有JWT的Cookie中的domain 設置爲頂級域名便可。

3。 使用JWT部署微服務

​ 結合JWT的微服務可以避免會話Session開銷,同時方便跨多機分佈式系統,這樣不須要每一個服務都要調用專門的受權服務以確認用戶操做本服務的權限。

  • 什麼是微服務

  • 使用Json Web Tokens 和 Spring 部署微服務

  • 第一個帶有用戶名和密碼的請求提交POST到一個未受保護的登陸受權REST端點,一旦用戶和密碼經過受權,響應中將包含一個JWT,之後的請求都會把這個JWT記號帶在HTTP頭部中,形式像: Authorization: xxxxx.yyyyy.zzzzz

    任何服務到服務的請求會一路傳遞這個請求頭部,這樣受權信息均可以應用在一路傳遞的服務中,這些服務均可以檢查這個JWT,以決定是否接受訪問。

4。 JJWT(Java Json Web Token)

第三方JJWT初步試用--JwtUtil.class

相關文章
相關標籤/搜索