一、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. VGA显示原理

    VGA显示是图像处理的基础,是一开始广泛使用的显示器,大部分机器采用VGA接口驱动,所以后来的显示器需要用VGA-xxx转接口来匹配. 用FPGA来驱动VGA,并不适用于显示动态(如手机显示,GUI) ...

  2. Dubbo源码(四) - 服务引用(消费者)

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 上一篇文章,讲了Dubbo的服务导出: Dubbo源码(三) - 服务导出(生产者) 本文,咱们 ...

  3. 调和级数为什么是 O(logn) 的

    目录 调和级数 正片 调和级数 调和级数(Harmonic series)定义为 \[H(n)=\sum_{i=1}^n\dfrac 1i \] \(H\) 发散,证明看百度 . 正片 首先我们把 \ ...

  4. DZY Loves Math II

    简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...

  5. Vue el与data的两种写法 && Object.defineProperty方法

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  6. .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式

    分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护. 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时. 与其 ...

  7. es5 es6 新增

    es5的新特性 对于数组和字符串都进行了加强 map 遍历 es6的新特性 数组的增强 find 查找findIndex 查找下标 字符的增强 includes 是否包含 (包含返回true 不包含返 ...

  8. 来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  9. 内网技巧-通过SAM数据库获得本地用户hash的方法

    内网技巧-通过SAM数据库获得本地用户hash的方法 在windows上的C:\Windows\System32\config目录保存着当前用户的密码hash.我们可以使用相关手段获取该hash. 提 ...

  10. 【JDBC】学习路径4-分页查询

    第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...