一、Net 6环境下的.net core项目里如何使用JWT。

  第一步,在Nuget引入JWT、Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGet包

  第二步,在appsettings.json配置相关配置

  

  第三步,在Program.cs中注册

  第四步,定义注册存入TokenHelper类,方便对JWT令牌进行管理,实现接口:

  第五步,在构造函数 还有IOC 容器中注入:

  第六步,登录方法中可直接调用获取 Token 值

纯代码: ->->->->

appsettings.json

----------------------------------------------------------------

"Authentication": {
"SecretKey": "nadjhfgkadshgoihfkajhkjdhsfaidkuahfhdksjaghidshyaukfhdjks",
"Issuer": "www.adsfsadfasdf",
"Audience": "www.adsfsadfasdf"
}

----------------------------------------------------------------

Program.cs

----------------------------------------------------------------

//JWT认证
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
//取出私钥
var secretByte = Encoding.UTF8.GetBytes(builder.Configuration["Authentication:SecretKey"]);
options.TokenValidationParameters = new TokenValidationParameters()
{
  //验证发布者
  ValidateIssuer = true,
  ValidIssuer = builder.Configuration["Authentication:Issuer"],
  //验证接收者
  ValidateAudience = true,
  ValidAudience = builder.Configuration["Authentication:Audience"],
  //验证是否过期
  ValidateLifetime = true,
  //验证私钥
  IssuerSigningKey = new SymmetricSecurityKey(secretByte)
};
});

----------------------------------------------------------------

TokenHelper.cs

----------------------------------------------------------------

public class TokenHelper
{
private readonly IConfiguration _configuration;
private readonly JwtSecurityTokenHandler _jwtSecurityTokenHandler;
public TokenHelper(IConfiguration configuration, JwtSecurityTokenHandler jwtSecurityTokenHandler)
{
  _configuration = configuration;
  _jwtSecurityTokenHandler = jwtSecurityTokenHandler;
}
/// <summary>
/// 创建加密JwtToken
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public string CreateJwtToken<T>(T user)
{
  var signingAlogorithm = SecurityAlgorithms.HmacSha256;
  var claimList = this.CreateClaimList(user);
  //Signature
  //取出私钥并以utf8编码字节输出
  var secretByte = Encoding.UTF8.GetBytes(_configuration["Authentication:SecretKey"]);
  //使用非对称算法对私钥进行加密
  var signingKey = new SymmetricSecurityKey(secretByte);
  //使用HmacSha256来验证加密后的私钥生成数字签名
  var signingCredentials = new SigningCredentials(signingKey, signingAlogorithm);
  //生成Token
  var Token = new JwtSecurityToken(
  issuer: _configuration["Authentication:Issuer"], //发布者
  audience: _configuration["Authentication:Au=dience"], //接收者
  claims: claimList, //存放的用户信息
  notBefore: DateTime.UtcNow, //发布时间
  expires: DateTime.UtcNow.AddDays(1), //有效期设置为1天
  signingCredentials //数字签名
  );
//生成字符串token
  var TokenStr = new JwtSecurityTokenHandler().WriteToken(Token);
  return TokenStr;
}

public T GetToken<T>(string Token)
{
  Type t = typeof(T);

  object objA = Activator.CreateInstance(t);
  var b = _jwtSecurityTokenHandler.ReadJwtToken(Token);
  foreach (var item in b.Claims)
  {
    PropertyInfo _Property = t.GetProperty(item.Type);
    if (_Property != null && _Property.CanRead)
    {
      _Property.SetValue(objA, item.Value, null);
    }

  }
return (T)objA;
}
/// <summary>
/// 创建包含用户信息的CalimList
/// </summary>
/// <param name="authUser"></param>
/// <returns></returns>
private List<Claim> CreateClaimList<T>(T authUser)
{
  var Class = typeof(UserDto);
  List<Claim> claimList = new List<Claim>();
  foreach (var item in Class.GetProperties())
  {
    if(item.Name=="UPass")
  {
    continue;
  }
    claimList.Add(new Claim(item.Name, Convert.ToString(item.GetValue(authUser))));
 }
  return claimList;
}
}

----------------------------------------------------------------

控制器API中

----------------------------------------------------------------

TokenHelper _tokenHelper;

public UserController(TokenHelper tokenHelper, JwtSecurityTokenHandler jwtSecurityTokenHandler)
{
  _tokenHelper = tokenHelper;
  _jwtSecurityTokenHandler = jwtSecurityTokenHandler;
}

//JWT
[AllowAnonymous]
[HttpPost]
public IActionResult JWTlogin(LoginDto user) //
{
  //1.验证用户账号密码是否正确
  if (user == null)
  {
    return BadRequest();
  }
  var result = _userServices.Login(user);
  if (result == null)
  {
    return Ok(new ResponseModel { Code = 0, Message = "登录失败" });
  }
  else
  {
    var Token=Response.Headers["TokenStr"] = _tokenHelper.CreateJwtToken(result);
    Response.Headers["Access-Control-Expose-Headers"] = "TokenStr";
    return Ok(Token);
  }
}

----------------------------------------------------------------

IOC容器中

----------------------------------------------------------------

//用于Jwt的各种操作
builder.RegisterType<JwtSecurityTokenHandler>().InstancePerLifetimeScope();
//自己写的支持泛型存入Jwt 便于扩展
builder.RegisterType<TokenHelper>().InstancePerLifetimeScope();

----------------------------------------------------------------

.NET6 JWT(生成Token令牌)的更多相关文章

  1. .net core 基于Jwt实现Token令牌

    Startup类ConfigureServices中 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJw ...

  2. 一、Core授权-2 之.net core 基于Jwt实现Token令牌

    一.Startup类配置 ConfigureServices中 //添加jwt验证: services.AddAuthentication(JwtBearerDefaults.Authenticati ...

  3. 国服最强JWT生成Token做登录校验讲解,看完保证你学会!

    转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...

  4. 利用jwt生成token,用于http请求身份验证

    前段时间在做移动端接口过程中,考虑到安全性,所有移动端发送请求(除了登录请求)过程中进行token有效验证. 1.利用jwt生成token a.导入jwt相关包 <!-- jwt --> ...

  5. 使用 JWT 生成 Token 代码示例

    JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...

  6. Token_使用JWT生成token

    1.token三部分 header   { "typ": "JWT", "alg": "HS256"   } paylo ...

  7. JWT生成token及过期处理方案

    业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...

  8. tp5使用jwt生成token,做api的用户认证

    首先 composer 安装  firebase/php-jwt github:https://github.com/firebase/php-jwt composer require firebas ...

  9. JWT生成token

    1.JWT简介 JSON Web Token 简称JWT.一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签名.JWT生成的token是这样的 2.Json Web Token(JWT)生 ...

随机推荐

  1. ESXI启用本地登录和SSH服务连接功能,使用Xshell连接

    1.选中Troubleshoot Options进行SSH服务配置 2.开启本地登录功能 3.开启远程连接功能 4.本地登录修改SSH服务允许基于密码登录 默认无法用密码登录ssh服务,只支持基于ke ...

  2. 算法竞赛进阶指南 0x52 背包

    背包问题是线性背包中的一类重要问题. 0/1背包 模型: 给定N个物品,每一个物品具有两种属性,一个是体积 \(v_i\) ,另一个是容积 \(w_i\) . 有一个容积为M的背包,求一种方案,使得选 ...

  3. 字符输入流Reader类和FileReader和字符输入流读取字符数据

    java.io.Reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类 共性成员方法: int read();读取单个字符并返回 int read(char[] ...

  4. 发布自己的npm组件库

    发布自己的npm组件库 前期准备 **git上建立自己的仓库,这样子是为了在本地初始化时,可以直接生成对应的 package.json ** 克隆仓库 创建仓库成功后,gitbush本地,执行 git ...

  5. python 面向对象理解

    简介 与java语言一样,python也属于面向对象编程,除此之外,还有面向过程编程.函数式编程. 面向过程编程:依据业务逻辑自上而下一步一步编写, 可能会存在冗余现象 函数式编程:需要编程语言可以将 ...

  6. 2500-使用MyBatis操作MySQL进行批量更新的注意事项

    原则上一条SQL只更新一条数据库操作,但有时需要批量操作数据,特别是一些DML语句,在操作数据库时,数据库会报出异常,不允许混合语句,此时需要额外配置进行兼容. 例如: Caused by: com. ...

  7. YII学习总结4(cookie操作)

    cookie操作 <?php namespace app\controllers; use yii\web\Controller; use yii\web\Cookie; class Hello ...

  8. 1.2 Hadoop快速入门

    1.2 Hadoop快速入门 1.Hadoop简介 Hadoop是一个开源的分布式计算平台. 提供功能:利用服务器集群,根据用户定义的业务逻辑,对海量数据的存储(HDFS)和分析计算(MapReduc ...

  9. BTDetect用户手册和技术支持

    BTDetect用户手册和技术支持 1. 程序主要功能 BTDetect是BT(BioTechnology) Detect 生物科技检测的缩写.本程序将根据用户的回答推断其两大基因类型.以及具体的小分 ...

  10. 轮询以及webSocket与socket.io原理

    概述: 首先,我们知道,起初的http协议只是为了能够进行通信而被创造出来(也就是请求-响应的过程).并没有双向通信这一说,后面随着历史业务的需求,人们使用轮询http来解决双向通信也就是使用xhr或 ...