视频地址:【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 head服务器托管er = 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 IEnumerablestring Name, object Value, string Type)> PropValueType(this object obj) { Liststring 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的详细代码
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: OpenAI Sora 关键技术详解:揭秘时空碎片 (Spacetime Patches) 技术
编者按:近日,OpenAI发布其首个视频生成模型“Sora”,该模型生成的视频内容可以呈现出多个角色、特定动作以及复杂场景,为构建能够理解和模拟现实世界的人工智能模型奠定了基础。 本文解析的重点即是 Sora 背后的核心技术 Spacetime Patches…