2023年,第31周,第2篇文章。給自己一個目標,然后堅持總會有收貨,不信你試試!
本篇文章主要簡單講講,.Net Framework框架下使用JWT的代碼例子,以及他們的基本概念。
2002年微軟發(fā)布了.net framework 1.0,那個時候博主剛開始玩?zhèn)髌嬗螒颍佑|電腦的時間還是挺早的。
1、什么是JWT
JWT(JSON Web Token)是一種開放的、自包含的標準,用于在網(wǎng)絡應用間傳輸信息。
它基于JSON(JavaScript Object Notation)格式,并使用數(shù)字簽名或加密來驗證消息的完整性和真實性。
JWT由三個部分組成:頭部(Header)、載荷(Payload)和簽名(Signature)。
1.1、頭部(Header)
包含描述JWT的元數(shù)據(jù),例如所使用的加密算法和類型(通常是JWT)。
{
"alg": "HS256",
"typ": "JWT"
}
1.2、載荷(Payload)
包含具體的數(shù)據(jù),也可以添加自定義的聲明(Claim),如用戶名、角色、過期時間等。
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
1.3、簽名(Signature)
由頭部和載荷組成,并使用私鑰(或?qū)ΨQ密鑰)進行簽名,確保數(shù)據(jù)的完整性和真實性。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secretKey
)
1.4、JWT工作流程
1)客戶端提供有效的憑證(如用戶名和密碼)進行身份驗證請求。
2)服務器進行身份驗證,并返回帶有有效簽名的JWT給客戶端。
3)客戶端在后續(xù)請求中使用該JWT,通過解析和驗證JWT,服務器可以確定請求的發(fā)起者身份和權限。
1.5、JWT優(yōu)點
1)自包含性
JWT包含了身份驗證和授權所需的所有信息,減輕了服務器存儲狀態(tài)的負擔。
2)松散耦合
JWT可用于不同的平臺和服務之間的身份驗證和授權,具有良好的兼容性。
3)可擴展性
可以自定義聲明來存儲額外的數(shù)據(jù)。
4)安全性
JWT的簽名可以確保數(shù)據(jù)的完整性和真實性。
1.6、JWT缺點
1)無法撤銷
一旦 JWT 被簽發(fā),就無法撤銷或使其失效,除非將密鑰從客戶端強制撤銷或更改。因此,如果需要撤銷令牌,JWT 不是一個合適的選擇。
2)體積較大
JWT 包含了頭部、載荷和簽名,在網(wǎng)絡傳輸中占用的空間相對較大。盡管可以對 JWT 進行壓縮,但仍然比一些其他的驗證機制更加臃腫。
3)敏感信息存儲
JWT 默認存儲在客戶端,通常存儲在瀏覽器的本地存儲(如 LocalStorage 或 Cookie)中。這使得 JWT 脆弱,因為它容易受到 XSS 攻擊的影響。因此,不建議將敏感信息存儲在 JWT 的載荷中。
需要注意的是,由于JWT是基于Base64編碼的,因此它并不是加密的。所以在使用JWT時,不要在其載荷中存儲敏感信息,如密碼或銀行卡號等。
總結起來,JWT是一種輕量級、安全的身份驗證和授權解決方案,其簡單的結構和可擴展性使其成為當今Web應用程序中常用的身份驗證標準之一。
2、Framework框架
2.1、版本歷時
.NET Framework 是微軟開發(fā)的一個應用程序開發(fā)框架,提供了開發(fā)和運行各種類型應用程序所需的庫、工具和運行時環(huán)境。下面是.NET Framework 各個主要版本的歷時情況:
編號 | 版本 | 發(fā)布時間 | 備注 |
---|---|---|---|
1 | .NET Framework 1.0 | 發(fā)布于2002年2月 | 這是最早的.NET Framework 版本,提供了基本的庫和運行時環(huán)境,用于支持開發(fā)和運行應用程序。 |
2 | .NET Framework 1.1 | 發(fā)布于2003年4月 | 這個版本是對 .NET Framework 1.0 的升級,增加了一些新功能和修復了一些問題。 |
3 | .NET Framework 2.0 | 發(fā)布于2005年11月 | 這是一個重大的版本升級,引入了許多新的功能,如可編程的 Windows Forms 控件、提供可視化設計的 Web 服務、增強的數(shù)據(jù)訪問和 XML 處理支持等。 |
4 | .NET Framework 3.0 | 發(fā)布于2006年11月 | 實際上,.NET Framework 3.0 并未引入新的運行時,而是在 .NET Framework 2.0 基礎上添加了一組新的功能。 |
5 | .NET Framework 3.5 | 發(fā)布于2007年11月 | 這是對 .NET Framework 3.0 的升級,引入了一些新的特性和改進,如 LINQ (Language Integrated Query)、ABM (ASP.NET AJAX) 等。 |
6 | .NET Framework 4.0 | 發(fā)布于2010年4月 | 這是一個又一個重大版本升級,引入了大量的新功能和改進,如支持并行計算、新的編譯器、Entity Framework 4.0、改進的 WCF 和 WPF 等。 |
7 | .NET Framework 4.5 | 發(fā)布于2012年8月 | 這是 .NET Framework 4.0 的升級版,引入了一些新的特性和改進,如異步編程模型 (async/await)、改進的 GC (垃圾回收器)、桌面應用程序的改進等。 |
8 | .NET Framework 4.6 | 發(fā)布于2015年7月 | 這是 .NET Framework 4.5 的升級版,引入了一些新的特性和改進,如 RyuJIT (即時編譯器)、改進的 WPF、改進的 ASP.NET 等。 |
9 | .NET Framework 4.7 | 發(fā)布于2017年4月 | 這是 .NET Framework 4.6 的升級版,引入了一些新的特性和改進。 |
10 | .NET Framework 4.8 | 發(fā)布于2019年4月 | 這是 .NET Framework 4.7 的升級版,引入了一些新的特性和改進。 |
需要注意的是,自.NET Framework 4.5起,微軟改變了發(fā)布策略,不再單獨發(fā)布全新的框架版本,而是通過積累更新 (Cumulative Updates) 來提供新功能和改進,以確保開發(fā)者可以更加輕松地升級和遷移。
此外,需要注意的是,自 .NET Framework 4.8 起,微軟正逐漸停止對傳統(tǒng)的.NET Framework 的更新,并推薦開發(fā)者使用更加開放和跨平臺的 “.NET” 系列產(chǎn)品,如 .NET Core 和 .NET 5+。
3、JWT代碼實現(xiàn)
在C# .NET Framework中使用JWT(JSON Web Token)插件來處理身份驗證和授權,
你可以使用提供JWT支持的第三方庫,如System.IdentityModel.Tokens.Jwt
。
這個庫是.NET Framework的一部分,可以用于創(chuàng)建和驗證JWT。
下面使用System.IdentityModel.Tokens.Jwt
庫生成和驗證JWT
3.1、引入庫
首先,確保你的項目引用了System.IdentityModel.Tokens.Jwt
庫。
3.2、導入命名空間
導入所需的命名空間:
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
3.3、生成JWT代碼
使用以下代碼生成JWT:
// 設置JWT的密鑰
string secretKey = "your_secret_key";
byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
var securityKey = new SymmetricSecurityKey(keyBytes);
// 創(chuàng)建JWT的簽名憑證
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
// 設置JWT的Claims
var claims = new[]
{
new Claim(ClaimTypes.Name, "John Doe"),
new Claim(ClaimTypes.Email, "john.doe@example.com"),
// 添加其他需要的聲明
};
// 創(chuàng)建JWT的Token
var token = new JwtSecurityToken(
issuer: "your_issuer",
audience: "your_audience",
claims: claims,
expires: DateTime.Now.AddDays(1),
signingCredentials: signingCredentials
);
// 生成JWT字符串
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
3.4、驗證JWT代碼
使用以下代碼驗證JWT:
// 驗證JWT的密鑰
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey,
ValidIssuer = "your_issuer",
ValidAudience = "your_audience"
};
// 驗證JWT字符串
var claimsPrincipal = new JwtSecurityTokenHandler().ValidateToken(jwtToken, tokenValidationParameters, out _);
請注意,上述示例中的"your_secret_key"、"your_issuer"和"your_audience"是示例值,你需要根據(jù)實際情況替換為真實的值。文章來源:http://www.zghlxwxcb.cn/news/detail-615521.html
使用以上代碼,你可以通過JwtSecurityTokenHandler
類生成JWT字符串,并使用同樣的類驗證和解析JWT字符串。你還可以根據(jù)需要添加其他聲明,設置過期時間和其他參數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-615521.html
到了這里,關于【C#】.Net Framework框架使用JWT的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!