在Abp.IO 框架上面加入JWT验证

发布时间 2023-10-27 16:51:37作者: 辉子毛

一.安装JWT所需的NuGet 包

 二.在WebModule.cs下配置

在这个类库中 找到ConfigureAuthentication 这个方法

 

 

 

 

 //授权认证(使用JWT)
        context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>
        {
            // 私钥
            var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");
            o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                // 验证发布者
                ValidateIssuer = true,
                // 发布者信息
                ValidIssuer = "www.cch",

                // 验证接收者
                ValidateAudience = true,
                // 接收者
                ValidAudience = "www.cch",

                // 验证是否过期
                ValidateLifetime = true,

                // 验证私钥
                IssuerSigningKey = new SymmetricSecurityKey(secretByte)

            };
        });

                //配置Swagger
              context.Services.AddSwaggerGen(o =>
                {
                    // 显示 授权信息
                    o.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                    {
                        Description = "添加JWT授权Token:Bearer Token值",
                        Name = "Authorization",
                        In = Microsoft.OpenApi.Models.ParameterLocation.Header,
                        Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
                        BearerFormat = "JWT",
                        Scheme = "Bearer"
                    });
                    o.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
                          {
                      {
                new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id = "Bearer"
                    }
                },
                new string[]
                {
                }
                   }
                 });
                });

  在下面OnApplicationInitialization这个方法中 加入鉴权

//鉴权
app.UseAuthentication();
app.UseAuthorization();

三.在实现类库中加上授权认证[Authorize] 

 

四.在实现里面写一个获取到Token值的方法,获取Token值的方法设置为匿名可访问 [AllowAnonymous]

 

 

 public string CreateTokenString()
        {
            //私钥
            var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");
            // 非对称加密
            var signingKey = new SymmetricSecurityKey(secretByte);
            // 使用256 生成数字签名
            var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
            // 生成Token
            var token = new JwtSecurityToken(
                issuer: "www.cch",
                audience: "www.cch",
                expires: DateTime.Now.AddDays(1), // 一天后过期
                signingCredentials: signingCredentials
            );
            // 生成token 字符串
            var strToken = new JwtSecurityTokenHandler().WriteToken(token);
            return strToken;
        }

  五.在用户登录的方法中,登录成功之后要生成JWT的Token值,返回到前端

 六.在Swagger中调试

  1.运行登录方法,登录成功后,复制生成出来的JWT token字符串

  2.点击右上角的Authorize按钮,然后在文本框中输入:Berarer token值,格式如:Bearer 

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTg0ODI1NzAsImlzcyI6Ind3dy5jY2giLCJhdWQiOiJ3d3cuY2NoIn0.YV_LGJ6PyVN81B1P4dtcWEBV0Pjh9ZMg35IOtAwCozI

然后点击'Authorize'

  3.之后运行Swagger中的其他方法,就可以正常运行