asp.net core web api自定义Swagger的UI界面及JWT身份认证的配置(一)
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身份认证的配置(二)
















