asp.net core web api自定义Swagger的UI界面, jwt身份认证的配置
首先,新建一个asp.net core web api新的项目。然后进行如下操作:
一、 添加swagger自定义的包名称 IGeekFan.AspNetCore.Knife4jUI
进入nuget包管理器,搜索IGeekFan.AspNetCore.Knife4jUI, 根据自已的程序版本选择合适的版本进行安装,我安装的是最新稳定版。
二、 修改launchsettings.json配置文件
打开 launchsettings.json配置文件, 修改如下,目的是去除默认的swagger ui 的启动。
三、 修改程序启动文件 Program.cs
以下部分修改如下:
builder.Services.AddSwaggerGen(p => { p.SwaggerDoc("v5", new OpenApiInfo() { Contact = new() { Email ="xxxxxxx@qq.com", Name="www.hao366.net api", Url=new Uri("https://www.hao366.net") }, Description="提供 https:// api相关内容", Title= "我的未来不是梦!" }); var xmlName = Assembly.GetExecutingAssembly().GetName().Name + ".xml"; p.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlName), true); });
if (app.Environment.IsDevelopment()) { //app.UseSwagger(); //app.UseSwaggerUI(); app.UseSwagger(p => { p.SerializeAsV2 = true; }); // 保留默认的swagger ui app.UseSwaggerUI(p => { p.SwaggerEndpoint("/swagger/v1/swagger.json", "v5"); p.RoutePrefix = "swagger"; }); // 使用自定义swagger UI app.UseKnife4UI(p => { p.SwaggerEndpoint("/swagger/v1/swagger.json", "我的未来不是梦!"); p.RoutePrefix = string.Empty; }); }
四、 引用以下三个nuget包
System.IdentityModel.Tokens.Jwt Microsoft.AspNetCore.Authentication.JwtBearer Microsoft.IdentityModel.Tokens
五、项目下新建Common文件夹,新建 JwtTokenOption.cs类
/// <summary> /// JwtTokenOption 相关类 /// </summary> public class JwtTokenOption { /// <summary> /// Token 过期时间,默认为60分钟 /// </summary> public int TokenExpireTime { get; set; } = 60; /// <summary> /// 接收人 /// </summary> public string Audience { get; set; } = string.Empty; /// <summary> /// 秘钥 /// </summary> public string SecurityKey { get; set; } = string.Empty; /// <summary> /// 签发人 /// </summary> public string Issuer { get; set; } = string.Empty; }
六、修改appsettings.json文件,加入如下配置,这里面的字段和上面的类的字段是对应的
"JwtTokenOption": { //Token过期时间,这个单位是分钟还是秒,是根据你的jwt过期时间的设置有关,你设置的分钟,这里就是分钟,你设置的秒,这里就是秒 "TokenExpireTime": 60, //调用此api的项目地址 "Audience": "https://www.baidu.com", //签发人,本API项目地址, 改成你的域名 "Issuer": "https://www.hao366.net", //找一个生成秘钥的工具,来生成此密钥, 也可以查看本站RAS生成私钥的相关文章,以下私钥不可用,必须换成自己的 "SecurityKey": "ABCKEIfMA0GCSqGSIb3DQEBA" }
七、映射JwtTokenOption配置类,打开 Program.cs 添加
映射JwtTokenOption配置类,把appsettings.json里的配置映射到 JwtTokenOption.cs类上去
//映射JwtTokenOption配置类,把appsettings.json里的配置映射到 JwtTokenOption.cs类上去 var jwtoption = builder.Configuration.GetSection("JwtTokenOption"); builder.Services.Configure<JwtTokenOption>(jwtoption); JwtTokenOption jwtTokenOption = jwtoption.Get<JwtTokenOption>()!; //添加认证服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(p => { //生成RSA密钥 var rsa =System.Security.Cryptography.RSA.Create(); //导入RSA私钥 , out _ 无输出,此参数不需要 rsa.ImportRSAPrivateKey(Convert.FromBase64String(jwtTokenOption.SecurityKey),out _); var securitykey =new RsaSecurityKey(rsa); //校验jwt是否合法 p.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() { ValidateIssuer = true,//是否验证Issuer ValidateAudience = true,//是否验证Audience ValidateLifetime = true,//是否验证失效时间 ClockSkew = TimeSpan.FromSeconds(30),//时钟脉冲相位差 ValidateIssuerSigningKey = true,//是否验证SecurityKey ValidAudience = jwtTokenOption.Audience,//Audience ValidIssuer = jwtTokenOption.Issuer,//Issuer,这两项和前面签发jwt的设置一致 IssuerSigningKey =securitykey, }; }); builder.Services.AddAuthorization(); .... ....下面添加认证授权 .... //先认证 app.UseAuthentication(); //再授权 app.UseAuthorization();
然后此文件programe.cs的下面的添加认证授权, 一定要先认证后授权
篇幅有限,移步下一页, asp.net core web api自定义Swagger的UI界面及JWT身份认证的配置(二)