【.NET 6】使用JWT Bearer 颁发 TOKEN 做用户权限验证 超级详细教程(附代码)

注:本文章使用的版本是.net6 (本文易错点,将会用此颜色字体标出)

什么是JWT,什么是JWT Bearer就不累述了。

第一步:对应项目安装Microsoft.AspNetCore.Authentication.JwtBearer

第二步:appsettings.json中,添加JWT的配置,参考代码如下,注意SecretKey不能设置太过简单,否则会报错。

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "JWT": {
    "SecretKey": "assdfghkldsf@123!",
    "Issuer": "2222",
    "Expires": 10,
    "Audience": "22333"
  }
}

第三步:在Program.cs中,将JWT添加到服务中,参考代码如下,如有报错查看并添加对应using即可。

    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["JWT:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["JWT:Audience"],
            ValidateLifetime = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"]))
        };
    });

第四步:在Program.cs中,启用认证,添加代码如下,这个必须添加在app.UseAuthorization();前面,两个名称很像,注意区别

app.UseAuthentication();

第五:在下面login接口中生成token返回用户,参考代码如下,示例写在了demo中的    WeatherForecastController控制器下,直接粘贴即可运行。

using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

namespace xxxxxxxxxx.api.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        
        private readonly IConfiguration _configuration;
        //一定要在这里注入configuration
        public WeatherForecastController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        [HttpGet]
        [Route("login")]
        public string login()
        {
            // 1. 定义需要使用到的Claims
            var claims = new[]
            {
                new Claim("Id", "9527"),
                new Claim("Name", "Admin")
            };

            // 2. 从 appsettings.json 中读取SecretKey
            var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:SecretKey"]));

            // 3. 选择加密算法
            var algorithm = SecurityAlgorithms.HmacSha256;

            // 4. 生成Credentials
            var signingCredentials = new SigningCredentials(secretKey, algorithm);

            // 5. 从 appsettings.json 中读取Expires
            var expires = Convert.ToDouble(_configuration["JWT:Expires"]);

            // 6. 根据以上,生成token
            var token = new JwtSecurityToken(
                _configuration["JWT:Issuer"],     //Issuer
                _configuration["JWT:Audience"],   //Audience
                claims,                          //Claims,
                DateTime.Now,                    //notBefore
                DateTime.Now.AddDays(expires),   //expires
                signingCredentials               //Credentials
            );

            // 7. 将token变为string
            var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
            return jwtToken;
        }
    }
}

注意:claims里面的内容应该要从外面传递进来,动态存一些用户信息之类的,configuration["JWT:SecretKey"]这种是在读取配置文件appsettings.json中的配置,configuration要在类的构造函数中注入进来。

第六,在对应业务的控制器上,或者控制器下面的方法上,加上特性[Authorize]

    [Route("api/[controller]")]
    [ApiController]
    [Authorize]

至此.NET 6实现了基本的 JWT Bearer认证和授权配置,当然可以进行更优的封装。

此教学绝对全网最详细,小白只需对照着一步一步细心的做,即可完成功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值