.net core之JWT(一)

前言

jwt是无状态,jwt信息只需要保存在客户端,无状态登录优势:分布式部署,jwt是通过token进行,jwt最重要部分是数字数字签名(VERIFY SIGNATURE),数字签名是通过非对称加密算法RSA,需要通过服务器私钥进行验证,如果私钥不丢失,基本上绝对安全(因为token是明文)。

JWT优缺点

优点:无状态,简单,方便,完美支持分布式部署
非对称加密,Token安全性高
缺点:1:因为是无状态,一经发布无法取消。(无解)
2:明文传递,token安全性低,知识通过base64加密
(使用https可以解决,可以通过https协议加密后进行展示)

需要的nuget包

安装管理包
在这里插入图片描述

如何获取jwt token

api接口

 [Route("auth")]
[ApiController]
public class LoginController : ControllerBase
{
    private readonly IConfiguration _configuration;
    public LoginController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    [AllowAnonymous] //每个人都可以进行访问
    [HttpPost("login")]
    public IActionResult Login([FromBody]LoginDto loginDto)
    {
        //1:验证用户名和密码

        //2: 创建jwt   jwt 由3部分进行
        // header
        var signingAlgorithm = SecurityAlgorithms.HmacSha256;
        // payload
        var claims = new[]{ 
            new Claim(JwtRegisteredClaimNames.Sub,"username")
        };

        // signiture

        //下面是jwt需要的参数
        
        //取数字签名的密钥
        var secret = _configuration["Authentication:SecretKey"];
        //进行转码
        var secretByte = Encoding.UTF8.GetBytes(secret);
        var signingKey = new SymmetricSecurityKey(secretByte);

        var signingCredentials = new SigningCredentials(signingKey, signingAlgorithm);

        var token = new JwtSecurityToken(
            issuer: _configuration["Authentication:Issuer"],//谁发布的token
            audience: _configuration["Authentication:Audience"],//这个token发布给谁
            claims,//payload
            notBefore: DateTime.UtcNow,//发布时间
            expires: DateTime.UtcNow.AddDays(1),//有效时间
            signingCredentials //数据前面
        );

        var tokenJson = new JwtSecurityTokenHandler().WriteToken(token);


        //3:OK+ Jwt
        return Ok(tokenJson);
    }
}

Dto

public class LoginDto
    {
        [Required]
        public string Email { get; set; }
        [Required]//说明必填
        public string Password { get; set; }

    }

在appsettings.json 方法加上:

"Authentication": {
    "Issuer": "testesttest.com",
    "Audience": "testesttest.com",
    "SecretKey": "woxiangceshinizhegejwt",//需要超过16个不然会出错
    "ExpiresDays": 7
  }

开始测试
在这里插入图片描述
成功得到密钥。在jwt.io进行测试密钥
在这里插入图片描述
好了,成功得到第一个基于JWT生成的token。开启完美的jwt一段征途吧!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值