使用WebApi+Vue3从0到1搭建《权限管理系统》:二、搭建JWT系统鉴权

视频地址:【WebApi+Vue3从0到1搭建《权限管理系统》系列视频:搭建JWT系统鉴权-哔哩哔哩】 https://b23.tv/R6cOcDO

qq群:801913255

一、在appsettings.json中设置鉴权属性

 /*jwt鉴权*/
 "JwtSetting": {
 "Issuer": "zhangsan", //发行人
   "Audience": "zhangsan", //订阅人
   "ExpireSeconds": 120, //过期时间,默认分钟
   "ENAlgorithm": "HS256", //秘钥算法 
   "SecurityKey": "Zmz=Start2024013OverallAuth.WebApi" //秘钥构成
 },

二、新建模型

添加模型JwtSettingModel其中字段和appsettings.json中的字段一样,如下

/// 
/// jwt 配置模型
/// 
public class JwtSettingModel
{
 /// 
    /// 发行人
 /// 
    public string Issuer { get; set; }

 /// 
    /// 订阅人
 /// 
    public string Audience { get; set; }

 /// 
    /// 过期时间,默认分钟
 /// 
    public int  ExpireSeconds { get; set; }

 /// 
    /// 秘钥算法
 /// 
    public string ENAlgorithm { get; set; }

 /// 
    /// 秘钥构成
 /// 
    public string SecurityKey { get; set; }

}

三、新建解析appsettings.json节点的帮助类

 /// 
 /// 配置文件解析帮助类
 /// 
 public class ConfigurationHelper
 {
 /// 
     /// 配置项
 /// 
     public static IConfiguration configuration { get; set; }

 /// 
     /// 构造实例化
 /// 
     static ConfigurationHelper() 
 {
 configuration = new ConfigurationBuilder().Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true }).Build();
 }

 /// 
     /// 获取appsetings 配置节点
 /// 
     /// 
     /// 
     /// 
     public static T GetNode(string node) where T : new() 
 {
 T mode = configuration.GetSection(node).Get();
 return mode;
 }

 }

四、在Startup.cs编写鉴权代码

找到ConfigureServices方法,在方法中添加如下代码

 //添加jwt鉴权
 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, option =>
 {
 var jwtsetting = ConfigurationHelper.GetNode("JwtSetting");
 Configuration.Bind("JwtSetting", jwtsetting);
 option.SaveToken = true;
 option.TokenValidationParameters = new TokenValidationParameters()
 {
 ValidIssuer = jwtsetting.Issuer,//发行人
 ValidAudience = jwtsetting.Audience,//订阅人
 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtsetting.SecurityKey)),//解密的密钥
 ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
 ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
 ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
 ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
 ClockSkew = TimeSpan.Zero,//这个是token缓冲过期时间,如果设置了,token过期时间就是缓冲时间+过期时间
 //RequireExpirationTime = true,
 };

 });

并在Configure方法中添加jwt授权代码 app.UseAuthorization();

五、编写Jwt帮助类

/// 
/// jwt帮助类
/// 
public static class JwtHelper
{
 /// 
    /// 生成token
 /// 
    /// 
    /// 
    public static string BuildToken(LoginModel loginResult)
 {
 LoginModel result = new();
 var jwtsetting = ConfigurationHelper.GetNode("JwtSetting");

 //获取登录信息
 var calime = loginResult.PropValueType().Select(x => new Claim(x.Name, x.Value.ToString(), x.Type)).ToList();

 //记录登录信息
 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtsetting.SecurityKey));
 var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
 var header = new JwtHeader(creds);
 var paylod = new JwtPayload(jwtsetting.Issuer, jwtsetting.Audience, calime, DateTime.Now, DateTime.Now.AddMinutes(jwtsetting.ExpireSeconds));

 //正式创建令牌
 var token = new JwtSecurityToken(header, paylod);
 var tokenStr = new JwtSecurityTokenHandler().WriteToken(token);
 var ddd = token.ValidTo.AddHours(8).ToString();
 return tokenStr;
 }

 /// 
 /// 反射获取字段信息
 /// 
 /// 模型
 /// 
 public static IEnumerable<(string Name, object Value, string Type)> PropValueType(this object obj)
 {
 List<(string a, object b, string c)> result = new();
 var type = obj.GetType();
 var props = type.GetProperties();
 foreach (var item in props)
 {
 result.Add((item.Name, item.GetValue(obj), item.PropertyType.Name));
 }
 return result;
 }
}

然后再webapi接口控制器上方添加鉴权特性[Authorize],这样所有接口都会遵守jwt鉴权协议

六、Swagger接口文档使用Jwt鉴权

做好以上五点,webapi中就能正常使用jwt鉴权,但如果你使用Swagger测试接口,那么就要让Swagger遵守Jwt协议

所以必须在添加以下代码,注意这段代码是写在AddSwaggerGen中

 //把jwt添加到swagger中
 optinos.AddSecurityDefinition("OverallAuth.WebApi", new OpenApiSecurityScheme
 {
 Description = "直接在下框中输入Bearer token(注意两者之间是一个空格)",
 Name = "Authorization",//jwt默认的参数名称
     In = ParameterLocation.Header,//jwt默认存放请求头中
     Type = SecuritySchemeType.ApiKey
 });

 //swagger遵守jwt授权协议
 optinos.AddSecurityRequirement(new OpenApiSecurityRequirement
 {
 {
 new OpenApiSecurityScheme{
 Reference = new OpenApiReference {
 Type = ReferenceType.SecurityScheme,
 Id = "OverallAuth.WebApi"
 }
 },new string[] { }
 }
 });

以上就是在webapi中使用jwt的详细代码

Netcore6.0是微软推出的全新版本的开发框架,它提供了强大且灵活的功能,用于构建Web应用程序和APIWeb API是Netcore6.0中的一项重要功能,它允许我们构建基于HTTP协议的API,并通过JSON格式进行数据交换。 JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全方法。在Netcore6.0中,我们可以使用JWT来实现Web API的授权功能。JWT由三部分组成:头部、载荷和签名。头部包含了令牌的类型和算法,载荷包含了我们想要传递的数据,签名通过使用密钥进行加密来验证令牌的合法性。 在Netcore6.0中,我们可以使用Microsoft提供的Microsoft.AspNetCore.Authentication.JwtBearer包来简单地实现JWT的授权功能。首先,我们需要在Startup.cs文件的ConfigureServices方法中配置JWT的身份验证服务,并指定密钥、颁发者、验证等参数。然后,在Configure方法中启用身份验证中间件和JWT授权中间件。 在Vue3中,我们可以使用Axios库来发送HTTP请求并附带JWT令牌进行授权。Vue3是一种流行的JavaScript框架,用于构建现代化的用户界面。通过Axios,我们可以将JWT令牌添加到请求的Authorization头部中,并在后端接收到请求时进行验证。 为了实现Vue3与Netcore6.0的JWT授权,我们首先需要在Vue3项目中安装Axios库,并配置请求拦截器,在每个请求发送前将JWT令牌添加到请求头中。后端接收到带有JWT令牌的请求后,使用相同的密钥和算法进行解密并验证令牌的合法性。 综上所述,Netcore6.0的Web APIVue3的JWT授权组合,可以实现安全可靠的API授权。通过合理的配置和使用,我们可以保护API免受未经授权的访问,并确保只有经过身份验证的用户才能访问敏感数据或执行特定操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值