日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 基于JWT的认证(二)

發(fā)布時間:2023/12/4 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 基于JWT的认证(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一節(jié)我們對?Jwt?的一些基礎(chǔ)知識進行了一個簡單的介紹,這一節(jié)我們將詳細(xì)的講解,本次我們將詳細(xì)的介紹一下?Jwt在?.Net Core?上的實際運用。

  • .Net Core 2.2

  • Visual Studio 2017

  • ASP.NET Core WebAPI2

在上一篇文章中,我們詳細(xì)的介紹了JWT的知識,這一次,我們將進行一次實戰(zhàn)的訓(xùn)練,這一塊將會有三個部分組成。分別是:
1.如何使用微軟官方提供的庫實現(xiàn)jwt
2.如何自定義一個Jwt認(rèn)證類
3.使用非關(guān)系型數(shù)據(jù)庫Redis對jwt信息的更新和替換
當(dāng)然,我在后期的文章中也會講解如何使用IdentityServer4去進行我們的權(quán)限控制。
在本文中,你將會學(xué)到如何使用微軟官方提供的庫進行Jwt的簽發(fā)、驗證以及權(quán)限控制。我們使用的WebApi作為演示程序。

配置信息的存儲

通常來說,我們會把數(shù)據(jù)庫等等一系列的配置放在我們的appsettings.json中,我們也嘗試著將我們的jwt私鑰等存在其中。

"JwtSettings": {
"Issuer": "admin",
"Audience": "user",
"SecretKey": "ahfuawivb754huab21n5n1"
}

當(dāng)然你也可以把更多的配置放進去。
然后我們用依賴注入的方法,將配置文件注入到我們的類對象中。我們創(chuàng)建一個JwtSetting類,并且在服務(wù)中進行注入。
類對象

public class JwtSettings
{
public string Issuer { get; set; }

public string Audience { get; set; }

public string SecretKey { get; set; }
}

注入

services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
JwtSettings setting = new JwtSettings();
Configuration.Bind("JwtSettings", setting);
JwtHelper.Settings = setting;

想必這里的代碼大家肯定是看的輕車熟路了,非常的簡單。
接下來我們對Jwt的簽發(fā)制作一個JwtHelper類。

Jwt的簽發(fā)

這一塊,你可以上網(wǎng)去查看權(quán)限模型的一些介紹。

這里我簡要的做一個介紹:
Claim是什么呢,他就是一個用于描述一個具體的實體對象的一些描述性的字段。

ClaimsIdentity就是用于指明Claim中所存儲的內(nèi)容的合集,比如我們的身份證,年齡、性別、身份證號碼等就組成了我們的身份證。

ClaimsPrincipal我們稱為“證件當(dāng)事人”,也就是我們之前聲明的東西的一個合計,類似,比如說你可能有駕照、身份證、醫(yī)保卡等等,而所持有這些的人就叫做ClaimsPrincipal

一些代碼是一個普通的結(jié)構(gòu),大家可以按照這種模板進行修改模型,從而創(chuàng)建自己的jwt結(jié)構(gòu)

代碼:

public class JwtHelper
{
private static JwtSettings settings;
public static JwtSettings Settings { set { settings = value; } }
public static string create_Token(TokenPayload user)
{

var claims = new Claim[] {
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Role, user.Role),
new Claim(ClaimTypes.Sid,user.Sid.ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(settings.SecretKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var token = new JwtSecurityToken(
issuer: settings.Issuer,
audience: settings.Audience,
claims: claims,
expires: DateTime.Now.AddDays(1),
signingCredentials: creds);
var Token = new JwtSecurityTokenHandler().WriteToken(token);
return Token;
}
}

JWT認(rèn)證

在這里,你可以使用我們下一節(jié)所遇到的自定義認(rèn)證,不過我們還是先學(xué)著使用我們最為普通的官方方法。具體的操作非常簡單,只需要在我們的容器service中注入一下就可以了。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(config =>
{
config.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = setting.Audience,
ValidIssuer = setting.Issuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(setting.SecretKey))
};
});

這樣,就完成了我們的jwt認(rèn)證過程。
如果我們需要從token中取出我們的信息也非常的簡單,利用依賴注入,使用
C# services.AddTransient<IGetInfoFromToken, GetInfoFromToken>();
自己創(chuàng)建號這兩個接口和類,對httpcontext進行截斷,從httpcontext.user中就可以直接取出我們需要的payload。當(dāng)然也可以使用中間件的方式,這里我們就不再用篇幅進行敘述了。

原文地址:https://www.cnblogs.com/WarrenRyan/p/10551630.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core 基于JWT的认证(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。