首页 DotNet asp.net core web api自定义Swagger的UI界面及JWT身份认证的配置(一)

asp.net core web api自定义Swagger的UI界面及JWT身份认证的配置(一)

2024-09-13 08:59 编辑:  丽丽学习网

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身份认证的配置(二)