自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊NET之JWT理解

開(kāi)發(fā) 后端
jwt是一個(gè)基于json的、用于在網(wǎng)絡(luò)上聲明某種主張的令牌,jwt通常是用三部分組成:頭信息,消息體,簽名。他是一種雙方之間傳遞安全信息的表述性聲明規(guī)范。主要用于集群分布式中。

[[410562]]

開(kāi)篇語(yǔ)

本文內(nèi)容參考多位大佬的文章編寫(xiě)而成。

介紹

jwt是一個(gè)基于json的、用于在網(wǎng)絡(luò)上聲明某種主張的令牌,jwt通常是用三部分組成:頭信息,消息體,簽名。他是一種雙方之間傳遞安全信息的表述性聲明規(guī)范。主要用于集群分布式中。

作用:可以做權(quán)限驗(yàn)證的使用,是一種標(biāo)準(zhǔn)化的數(shù)據(jù)傳輸規(guī)范,但是目的不是為了數(shù)據(jù)加密和保護(hù)。

使用場(chǎng)景

  • 授權(quán):用于授權(quán)而并非是身份驗(yàn)證。通過(guò)身份驗(yàn)證,我們驗(yàn)證用戶(hù)的用戶(hù)名和密碼是否有效,并將用戶(hù)登錄到系統(tǒng)中,通過(guò)授權(quán),我們可以驗(yàn)證發(fā)送到服務(wù)器的請(qǐng)求是否屬于通過(guò)身份驗(yàn)證登錄的用戶(hù),從而可以授予該用戶(hù)訪問(wèn)系統(tǒng)的權(quán)限,繼而批準(zhǔn)該用戶(hù)使用獲取的token訪問(wèn)路由、服務(wù)和資源。
  •  
  • 信息交換:json web token是在雙方之間安全地傳輸信息的一種好方法。因?yàn)閖wt可以被簽名,所以使您能夠確保發(fā)送方是他們聲稱(chēng)的那一方,由于簽名使用header和payload計(jì)算的,因此還使您能驗(yàn)證發(fā)送的內(nèi)容沒(méi)有被篡改。

對(duì)比token+redis

JWT就是Json Web Token,就是Token的典型方式。JWT和Token+Redis的區(qū)別,其實(shí)都是Token,只是JWT的可靠性保障是來(lái)源于加密算法(對(duì)稱(chēng)加密和非對(duì)稱(chēng)兩種),而Token+Redis的方案是依靠的后臺(tái)數(shù)據(jù)存儲(chǔ)。這兩個(gè)本質(zhì)也就帶來(lái)了使用上的區(qū)別:

1 JWT是去中心化的,不需要任何后臺(tái)數(shù)據(jù)的共享,第三方認(rèn)證、跨數(shù)據(jù)中心認(rèn)證、微服務(wù)等,都適合采用JWT的方式,當(dāng)然,因?yàn)槭侨ブ行幕?,不是?shí)時(shí)驗(yàn)證,所以本質(zhì)上來(lái)說(shuō)token的主動(dòng)過(guò)期是做不到的(要做到就會(huì)違背初衷)

2 Token+Redis是中心化的,要能識(shí)別token必須能訪問(wèn)該Redis,除非是有特別需求,要求每次token都實(shí)時(shí)檢測(cè),否則的話(huà)還是選擇JWT,畢竟是成熟通用的技術(shù),溝通維護(hù)成本也低,對(duì)開(kāi)發(fā)者也友好一些。

這點(diǎn)我忘記是摘錄哪個(gè)大佬的文章了,所以沒(méi)有給出引用地址很抱歉。

流程

用戶(hù)通過(guò)登錄去向服務(wù)系統(tǒng)發(fā)起請(qǐng)求,然后生成帶一定用戶(hù)信息的數(shù)據(jù)作為令牌(jwt)返回給用戶(hù),用戶(hù)拿到返回過(guò)來(lái)的信息在請(qǐng)求接口的時(shí)候放入頭部,服務(wù)系統(tǒng)會(huì)從頭部獲取到令牌后驗(yàn)證簽名的有效性,對(duì)客戶(hù)端做出相應(yīng)的響應(yīng)。

 

  1. Authorization: Bearer <token> 

如果想在接口中獲取jwt令牌,可以使用

  1. var tokenHeader = HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer """); 

現(xiàn)在感覺(jué)作用就是可以通過(guò)jwt實(shí)現(xiàn)權(quán)限,在系統(tǒng)中定義好有哪些權(quán)限,然后在方法頭部去設(shè)置哪些角色可以去訪問(wèn)這個(gè)東西。如果存放token,我的想法是把用戶(hù)的信息放到j(luò)wt內(nèi)部,然后前端通過(guò)登錄去獲取這東西,然后我返回這個(gè)東西到前臺(tái),每次調(diào)用接口時(shí)候把這個(gè)東西傳出過(guò)來(lái),然后我通過(guò)將這個(gè)解密獲取到我登錄時(shí)候存進(jìn)去的信息。然后進(jìn)行我自己的操作。

注意:

生成jwt時(shí)候的key必須在16位以上,否則會(huì)因?yàn)殚L(zhǎng)度不夠拋出異常

jwt本身是不加密的,里面包含的信息任何人都可以讀取到。

jwt的簽名部分是對(duì)前兩部分的簽名,防止數(shù)據(jù)被篡改,

Bearer認(rèn)證

Bearer認(rèn)證(也叫做令牌認(rèn)證)是一種HTTP認(rèn)證方案,其中包含的安全令牌的叫做Bearer Token。因此Bearer認(rèn)證的核心是Token。那如何確保Token的安全是重中之重。一種方式是使用Https,另一種方式就是對(duì)Token進(jìn)行加密簽名。而JWT就是一種比較流行的Token編碼方式。

驗(yàn)證

  1. //全局增加配置 
  2. services.AddControllers((options) => 
  3.     options.Filters.Add(new AuthorizeFilter());//添加全局的Authorize 
  4. }); 
  5.  
  6.  
  7. //控制器或者方法增加配置 
  8. [Authorize] 

原理

  • 獲取token
  • 第一步:對(duì)token進(jìn)行切割
  • 第二步:對(duì)第二段解碼,獲取payload,檢測(cè)token是否超時(shí)
  • 第三步:把前兩段拼接再次執(zhí)行HS256加密,把加密后的密文和第三段比較。如果相等,認(rèn)證通過(guò)

參考文檔

曉晨:https://www.cnblogs.com/stulzq/p/7417548.html

 

老張的哲學(xué):https://www.cnblogs.com/laozhang-is-phi/category/1413402.html

 

責(zé)任編輯:武曉燕 來(lái)源: 鵬祥
相關(guān)推薦

2021-06-08 09:28:12

.Net通知服務(wù)

2021-02-07 09:05:56

微服務(wù)結(jié)構(gòu)云原生

2023-08-09 09:11:57

算法分發(fā)效果

2025-02-20 08:18:12

JWTWeb分布式

2024-09-09 07:37:51

AspJWT權(quán)限

2021-07-14 06:45:49

Windows.NetTopshelf

2024-01-22 10:18:32

平臺(tái)工程開(kāi)發(fā)人員技術(shù)

2022-12-28 08:16:16

metric聚合java

2023-07-12 13:08:58

性能測(cè)試數(shù)據(jù)

2025-04-01 12:00:00

gRPC分布式系微服務(wù)

2025-03-07 00:11:00

JWTJSONSession

2021-03-02 06:00:05

Docker.NET 5 Dockerfile

2021-01-27 05:28:38

工具RestSharpHTTP

2024-10-08 10:11:57

2021-02-19 06:54:33

配置系統(tǒng)ASP.NET Cor

2024-03-11 10:21:53

.NET9調(diào)用FCall

2022-01-10 11:28:55

數(shù)據(jù)結(jié)構(gòu)算法DP入門(mén)

2020-05-27 08:05:33

MybatisMapper接口

2025-01-14 08:32:55

JWT令牌.NET

2021-03-23 10:45:23

CookieSession前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)