JWT入門

JWT與TOKEN

JWT(JSON Web Token)是一種基于 JSON 格式的輕量級安全令牌,通常用于在網絡應用間安全地傳遞信息。而“token”一詞則是一個更廣泛的術語,用來指代任何形式的令牌,用于在計算機系統中進行身份驗證或授權。JWT 是 token 的一種具體實現方式,提供了一種基于 JSON 結構的令牌標準,用于在客戶端和服務器之間傳遞信息,并在許多網絡應用中廣泛使用。

1.簡介

Json Web Token,通過數字簽名的方式,以JSON對象為載體,不需中間服務器驗證的情況下,允許在源和接收方之間可靠傳輸,確保信息的完整性和真實性

2.用處

授權認證,一旦用戶登錄,后續每個請求都包含有JWT,系統在每次處理請求之前,都先進行JWT安全校驗。

3.組成

由3部分組成,用"."拼接

三部分分別是:

  • Header

    • token類型

    • 加密算法名稱

  • Payload 載荷,存放有效信息

    • 標準中注冊的聲明 ---信息安全的分類

    • 公共的聲明

    • 私有的聲明

  • Signature 簽名

    • 將加密后的Header和加密后的Payload用點拼接,再將結果通過header中聲明的加密算法進行加密

例子

        <!--jwt依賴--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>       

package com.jwt;import com.sun.javafx.binding.StringFormatter;
import io.jsonwebtoken.*;import java.util.Date;
import java.util.UUID;public class Test {// 24hprivate long time = 1000 * 60 * 60 * 24;private String signature = "admin";/*** 測試JWT令牌的生成和配置。* 使用JJWT庫創建一個包含特定頭部、載荷和簽名的JWT令牌。* 頭部配置了令牌的類型和算法。* 載荷包含了用戶名、密碼和主題等信息。* 設置了令牌的過期時間和唯一標識。* 使用HS256算法對令牌進行簽名以確保完整性。*/@org.junit.Testpublic void jwtTest() {// 創建JWT令牌構建器JwtBuilder jwtBuilder = Jwts.builder();// 構建并配置JWT令牌String jwtToken = jwtBuilder// 設置頭部參數,定義令牌類型和算法// header.setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")// 設置載荷信息,包含用戶名和密碼// payload.claim("username", "admin").claim("password", "123456")// 設置主題.setSubject("admin-Test")// 設置令牌過期時間.setExpiration(new Date(System.currentTimeMillis() + time))// 設置令牌的唯一標識.setId(UUID.randomUUID().toString())// 設置令牌的發行時間.setIssuedAt(new Date())// 使用HS256算法和簽名密鑰對令牌進行簽名// signature.signWith(SignatureAlgorithm.HS256, signature)// 將令牌緊湊化為最終的字符串表示形式.compact();System.out.println(jwtToken);}/*** 解析JWT令牌。* 該方法演示了如何使用JJWT庫解析一個JWT令牌,并從中提取出聲明信息。* JWT令牌被設計為一種安全的數據傳輸方式,其中包含了用戶信息或其他需要傳遞給服務端的信息。* 在這個例子中,我們解析令牌以獲取用戶名、密碼、令牌ID、主題和過期時間等信息。*/@org.junit.Testpublic void parse(){// 定義一個JWT令牌字符串String jwtToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiIxMjM0NTYiLCJzdWIiOiJhZG1pbi1UZXN0IiwiZXhwIjoxNzE5ODM1Mzc4LCJqdGkiOiJiOGI2M2QxYy1iODhiLTQ4MDAtOWEyYi0yOTVkY2Q3NDNjMTQiLCJpYXQiOjE3MTk3NDg5Nzh9.Espy5I1IjwuPmnkHx-6TTie_VUP2zLDnasxfNDilclI";// 創建JWT解析器JwtParser jwtParser = Jwts.parser();// 設置解析器的簽名密鑰,并解析JWT令牌為Jws<Claims>對象Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(jwtToken);// 提取聲明信息Claims claims = claimsJws.getBody();// 打印提取的聲明信息:用戶名、密碼、令牌ID、主題和過期時間System.out.println(claims.get("username"));System.out.println(claims.get("password"));System.out.println(claims.getId());System.out.println(claims.getSubject());System.out.println(claims.getExpiration());}}
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40706.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【?講解下Laravel為什么會成為最優雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

cloudreve 設置開機服務

創建一個Systemd服務文件&#xff1a; 打開終端并創建一個新的服務文件&#xff1a; sudo nano /etc/systemd/system/cloudreve.service 在服務文件中添加以下內容&#xff1a; 根據你的設置調整路徑和參數&#xff0c;然后將以下配置粘貼到文件中&#xff1a; [Unit] Descri…

Django學習第四天

啟動項目命令 python manage.py runserver 分頁功能封裝到類中去 封裝的類的代碼 """ 自定義的分頁組件,以后如果想要使用這個分頁組件&#xff0c;你需要做&#xff1a; def pretty_list(request):# 靚號列表data_dict {}search_data request.GET.get(q, &…

Excel為數據繪制拆線圖,并將均值線疊加在圖上,以及整個過程的區域錄屏python腳本

Excel為數據繪制拆線圖,并將均值線疊加在圖上,以及整個過程的區域錄屏python腳本 1.演示動畫A.視頻B.gif動畫 2.跟蹤鼠標區域的錄屏腳本 Excel中有一組數據,希望畫出曲線,并且能把均值線也繪制在圖上,以下動畫演示了整個過程,并且提供了區域錄屏腳本,原理如下: 為節約空間,避免…

從華為和特斯拉之爭,看智能駕駛的未來

“一旦特斯拉完全解決自動駕駛問題并量產Optimus&#xff0c;任何空頭都將被消滅&#xff0c;即使是比爾-蓋茨也不例外。”7月2日&#xff0c;馬斯克再次在社交媒體X上畫下了這樣的“大餅”。 與此同時&#xff0c;特斯拉的股價在最近的三個交易日也迎來了24%的漲幅&#xff0c…

中俄汽車產業鏈合作前景廣闊,東方經濟論壇助力雙邊合作與創新

隨著中國汽車零部件企業的競爭力和創新能力不斷增強&#xff0c;中國汽車及零部件行業在俄羅斯的市場份額和品牌影響力顯著提升&#xff0c;中俄兩國在汽車產業鏈上的合作展現出巨大的潛力和廣闊的前景。2024年5月&#xff0c;俄羅斯乘用車新車銷量達到12.8萬輛&#xff0c;同比…

7.基于SpringBoot的SSMP整合案例-表現層開發

目錄 1.基于Restfu1進行表現層接口開發 1.1創建功能類 1.2基于Restful制作表現層接口 2.接收參數 2使用Apifox測試表現層接口功能 保存接口&#xff1a; 分頁接口&#xff1a; 3.表現層一致性處理 3.1先創建一個工具類&#xff0c;用作后端返回格式統一類&#xff1a;…

SpringMVC 的工作流程和詳細解釋

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于經典的 MVC 設計模式構建的&#xff0c;用于開發 Web 應用程序。下面是 Spring Boot MVC 的工作流程和詳細解釋&#xff1a; 1.客戶端發起請求 1.客戶端&#xff08;通常是瀏覽器&#xff09;發起 HTTP 請求…

招聘智能管理系統設計

設計一個招聘智能管理系統&#xff0c;需要從多個維度考慮&#xff0c;包括但不限于用戶界面、功能模塊、數據安全、算法模型等。以下是一個基本的設計框架&#xff1a; 1. 系統架構&#xff1a; 前端&#xff1a;提供直觀的用戶界面&#xff0c;包括應聘者和招聘者的登錄/注冊…

Python學習篇:Python基礎知識(三)

目錄 1 Python保留字 2 注釋 3 行與縮進 ?編輯4 多行語句 5 輸入和輸出 6 變量 7 數據類型 8 類型轉換 9 表達式 10 運算符 1 Python保留字 Python保留字&#xff08;也稱為關鍵字&#xff09;是Python編程語言中預定義的、具有特殊含義的標識符。這些保留字不能用作…

Android 工具腳本

工具腳本 Shell腳本 獲取Git分支名稱 def gitBranch() {def branch ""def proc "git rev-parse --abbrev-ref HEAD".execute()proc.in.eachLine { line -> branch line }proc.err.eachLine { line -> println line }proc.waitFor()branch }

生信算法9 - 正則表達式匹配氨基酸序列、核型和字符串

1. 使用正則表達式匹配指定的氨基酸序列 import re# 氨基酸序列 seq VSVLTMFRYAGWLDRLYMLVGTQLAAIIHGVALPLMMLI# 正則表達式匹配 match re.search(r[A|G]W, seq)# 打印match及匹配到開始位置和結束位置 print(match) # <re.Match object; span(10, 12), matchGW> prin…

DP學習——觀察者模式

學而時習之&#xff0c;溫故而知新。 2個角色 分為啥主題和觀察者角色。 我覺得主題就是干活的&#xff0c;打工仔&#xff0c;為觀察者干活。 一對多。一個主題&#xff0c;多個觀察者——就像一個開發人員對多個項目經理——項目經理拿小皮鞭抽呀抽呀&#xff0c;受不了。 …

代碼隨想錄算法訓練營第70天圖論9[1]

代碼隨想錄算法訓練營第70天:圖論9 ? 拓撲排序精講 卡碼網&#xff1a;117. 軟件構建(opens new window) 題目描述&#xff1a; 某個大型軟件項目的構建系統擁有 N 個文件&#xff0c;文件編號從 0 到 N - 1&#xff0c;在這些文件中&#xff0c;某些文件依賴于其他文件的…

5款軟件讓電腦更方便,更快,更好看

? 你有沒有想過&#xff0c;有些軟件能讓你的電腦用起來更方便&#xff0c;更快&#xff0c;更好看&#xff1f; 1. 屏幕動畫創作——Screen To Gif ? Screen To Gif是一款功能強大的屏幕錄制軟件&#xff0c;專注于將屏幕上的動態內容轉換為高質量的GIF動畫。它不僅支持自…

《ClipCap》論文筆記(下)

原文出處 [2111.09734] ClipCap: CLIP Prefix for Image Captioning (arxiv.org) 原文翻譯 接上篇 《ClipCap》論文筆記&#xff08;上&#xff09;-CSDN博客 4. Results Datasets.我們使用 COCO-captions [7,22]、nocaps [1] 和 Conceptual Captions [33] 數據集。我們根…

自動化設備上位機設計 一

目錄 一 設計原型 二 后臺代碼 一 設計原型 二 后臺代碼 namespace 自動化上位機設計 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}} }namespace 自動化上位機設計 {partial class Fo…

Pyqt5中如何讓label里面的圖片進行更換,避免出現黑圖

在Pyqt5的界面開發過程中&#xff0c;發現一個label的圖片怎么都添加不上&#xff0c;而且出現黑色&#xff0c;主要原因就是在進行顯示的時候需要加一行清除的代碼&#xff1a; label.clear()如果不加這行代碼&#xff0c;當里面的圖片發生變化時&#xff0c;顯示出來的就是黑…

miniprogram-to-uniapp-微信小程序轉換成uniapp項目

文章目錄 參考:miniprogram-to-uniapp使用指南第一步第二步第三步第四步【miniprogram-to-uniapp】轉換微信小程序”項目為uni-app項目(新版本工具已經支持各種小程序轉換) 參考: 小程序技能樹 uni-app基礎知識總結 miniprogram-to-uniapp使用指南 第一步 win + R 輸入…

Openwrt路由器部分ipv6公網地址無法訪問的問題

路由器是Openwrt&#xff0c;終端訪問ipv6地址經常有些能訪問&#xff0c;有些不能訪問&#xff0c;一開始以為是運營商問題&#xff0c;后面ssh到openwrt發現所有訪問都正常。 查閱資料后才知道是MTU設置問題&#xff0c;Openwrt 默認MTU是1492&#xff0c;使用IPV6應減少60個…