當前位置:編程學習大全網 - 源碼下載 - shiro(13)-JWT(Token的生成)

shiro(13)-JWT(Token的生成)

JWT(json web token)是為了在網絡應用環境之間傳遞聲明而執行的壹種基於JSON的開放標準。

JWT的聲明壹般被用來在 身份提供者 服務提供者 間傳遞被認證的用戶身份信息,以便從資源服務器獲取資源。比如用於登錄。

shiro(9)-有狀態身份認證和無狀態身份認證的區別

JWT由三部分組成:頭部(header)、載荷(payload)、簽名(signature)。頭部定義類型和加密方式;載荷部分放的不是很重要的數據;簽名使用定義的加密方式加密base64後的header和payload和壹段自己加密key。最後的token由base64(header).base64(payload).base64(signature)組成。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmciOiLku4rml6XlpLTmnaEiLCJuYW1lIjoiRnJlZeeggeWGnCIsImV4cCI6MTUxNDM1NjEwMywiaWF0IjoxNTE0MzU2MDQzLCJhZ2UiOiIyOCJ9.49UF72vSkj-sA4aHHiYN5eoZ9Nb4w5Vb45PsLF7x_NY

JWT頭部分是壹個描述JWT元數據的JSON對象。

完整的頭部就像下面這樣的json。

然後將頭部進行base64加密,構成第壹部分:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

載荷是存放有效信息的地方,這些有效部分包含三個部分。

公***的聲明可以添加任何的信息,壹般添加用戶的相關信息或其他業務需要的必要信息, 但不建議添加敏感的信息,因為這部分在客戶端可解密。

私有聲明是提供者和消費者所***同定義的聲明,壹般不建議存放敏感信息,因為base64是對稱解密的,意味著該部分信息可以歸類為明文信息。

定義壹個payload:

然後將其進行base64加密,得到第二部分

eyJvcmciOiLku4rml6XlpLTmnaEiLCJuYW1lIjoiRnJlZeeggeWGnCIsImV4cCI6MTUxNDM1NjEwMywiaWF0IjoxNTE0MzU2MDQzLCJhZ2UiOiIyOCJ9

jwt的第三部分是壹個簽證信息,這個簽證信息由三部分組成:

這個部分需要base64加密後的header和base64加密後的payload使用 . 連接組成的字符串,然後通過header中聲明的加密方式進行加鹽secret組合加密,就構成了jwt的第三部分:

49UF72vSkj-sA4aHHiYN5eoZ9Nb4w5Vb45PsLF7x_NY

註:密鑰secret是保存在服務端的,服務端會根據這個密鑰進行生成token和驗證,所以要保護好。

解析結果

重放攻擊是攻擊者獲取客戶端發送給服務器端的包,不做修改,原封不動的發送給服務器用來實現某些功能。比如說客戶端發送給服務器端壹個包的功能是查詢某個信息,攻擊者攔截到這個包,然後想要查詢這個信息的時候,把這個包發送給服務器,服務器就會做相應的操作,返回查詢的信息。

  • 上一篇:臨時額度到期還清之後能再次使用嗎
  • 下一篇:鳥p源代碼
  • copyright 2024編程學習大全網