本文只是介绍了下基于AspNetCore自带的System.IdentityModel.Tokens.Jwt.dll工具在项目中Token的应用。

我这里谈到的很浅显就两点:

一,超时时间

二,数据的加载

1,废话不多说上代码,首先是自定义的载体类如下

   public class DtoRecLogin
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public string Data3 { get; set; }
}

2,接着是Token生成的签名信息

public class TokenAuthOption
{
public static string Audience { get; } = "ExampleAudience";
public static string Issuer { get; } = "ExampleIssuer";
public static RsaSecurityKey Key { get; } = new RsaSecurityKey(RSAKeyHelper.GenerateKey());
public static SigningCredentials SigningCredentials { get; } = new SigningCredentials(Key, SecurityAlgorithms.RsaSha256Signature); public static TimeSpan ExpiresSpan { get; } = TimeSpan.FromMinutes();
}

3,好了准备工作完成接着贴上生成Token的代码

 private static string GenerateToken(DtoRecLogin reclogin, DateTime expires)
{
var handler = new JwtSecurityTokenHandler(); ClaimsIdentity identity = new ClaimsIdentity(
new GenericIdentity(reclogin.Data1, "TokenAuth"),
new[] {
new Claim("ID", reclogin.Data2),
new Claim("SysCode",reclogin.Data3)
}
); var securityToken = handler.CreateToken(new SecurityTokenDescriptor
{
Issuer = TokenAuthOption.Issuer,
Audience = TokenAuthOption.Audience,
SigningCredentials = TokenAuthOption.SigningCredentials,
Subject = identity,
Expires = expires
});
return handler.WriteToken(securityToken);
}

这个方法有2个参数

1)DtoRecLogin对象用于承载需要传递的信息

2)  expires 是Token的超时时间

4,Token生成完毕我们来模拟下调用和解析Token

 public static void Main(string[] args)
{
#region 生成Token
var timeout = DateTime.Now + TimeSpan.FromSeconds();
var token = GenerateToken(new DtoRecLogin()
{
Data1 = "TestData1",
Data2 = "TestData2",
Data3 = "TestData3"
}, timeout);
#endregion #region 解析Token
//当前的时间戳用于判断token是否过期
var now = Math.Round((DateTime.UtcNow - new DateTime(, , , , , , DateTimeKind.Utc)).TotalSeconds); var encodedJwt = new JwtSecurityTokenHandler().ReadJwtToken(token);
//开始时间
var iat = Convert.ToDouble(encodedJwt.Claims.FirstOrDefault(u => u.Type == "iat").Value);
//结束时间
var exp = Convert.ToDouble(encodedJwt.Claims.FirstOrDefault(u => u.Type == "exp").Value); //如果当前时间戳不再Token声明周期范围内,则返回Token过期
if (!(iat < now && now < exp))
{
throw (new Exception() { Source = "TokenTimeOut" });
} var data1 = encodedJwt.Claims.FirstOrDefault(u => u.Type == "unique_name").Value;
var data2 = encodedJwt.Claims.FirstOrDefault(u => u.Type == "ID").Value;
var data3 = encodedJwt.Claims.FirstOrDefault(u => u.Type == "SysCode").Value;
#endregion }

注释的很详细就不多说了,为了方便的测试我用了5秒钟超时,在调试的时候 可以在

 var now = Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);
打上断点,然后一次直接跳过此处,一次等待5秒以上在往下走,可以发现超过5秒会抛Token过期异常 好了,到此结束,希望可以帮到刚接触Token验证的朋友。

Asp.NetCore安全验证之JWT的更多相关文章

  1. ASP.NET Core WebApi基于JWT实现接口授权验证

    一.ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再 ...

  2. Asp.NetCore Web开发之模型验证

    在开发中,验证表单数据是很重要的一环,如果对用户输入的数据不加限制,那么当错误的数据提交到后台后,轻则破坏数据的有效性,重则会导致服务器瘫痪,这是很致命的. 所以进行数据有效性验证是必要的,我们一般通 ...

  3. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  4. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装N ...

  5. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  6. ASP.NETCORE MVC模块化

    ASP.NETCORE MVC模块化编程 前言 记得上一篇博客中跟大家分享的是基于ASP.NETMVC5,实际也就是基于NETFRAMEWORK平台实现的这么一个轻量级插件式框架.那么今天我主要分享的 ...

  7. ASP.NET Core系列:JWT身份认证

    1. JWT概述 JSON Web Token(JWT)是目前流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io JWT的实现方式是将用户信息存储在客户端,服务端不进行保存. ...

  8. ASP.NET Core 2.1 JWT Token 使用 (二) - 简书

    原文:ASP.NET Core 2.1 JWT Token 使用 (二) - 简书 接上文,https://www.jianshu.com/p/c5f9ea3b4b65 ASP.NET Core 2. ...

  9. ASP.NET Core 2.1 JWT token (一) - 简书

    原文:ASP.NET Core 2.1 JWT token (一) - 简书 JwtBearer认证是一种标准的,通用的,无状态的,与语言无关的认证方式.Bearer验证属于HTTP协议标准验证. 如 ...

随机推荐

  1. Django之路 - 实现登录随机验证码

    登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...

  2. 将一个list分为每份小鱼1000的

    List<LazadaTrackingDataTO> dataSourceList = new ArrayList<LazadaTrackingDataTO>();       ...

  3. C++Builder 也有StringBuilder

    System::Sysutils::TStringBuilder *sb = new TStringBuilder;    sb->Append("ww");    sb-& ...

  4. 当前触发事件的两种方式(onclick) 和 ('id') 获取

    1. <input type='text' onclick = 'Clickon(this)'> <script> function Clickon(num){ num.sty ...

  5. Linux CPU 100%, kill -9 杀不掉进程

    1: top 查看 >top -c 此时 我们使用kill -9 15003, 杀掉这个进程短暂的CPU降低几秒, 然后死灰复燃了, 又一个进程占了CPU 99% 2: 查看15003 进程状态 ...

  6. random.nextint()

    自从JDK最初版本发布起,我们就可以使用java.util.Random类产生随机数了.在JDK1.2中,Random类有了一个名为nextInt()的方法: public int nextInt(i ...

  7. Docker构建redis cluster集群

    准备工作 安装gcc ruby 解压编译redis Redis 是 c 语言开发的.安装 redis 需要 c 语言的编译环境.如果没有 gcc 需要在线安装. yum install gcc-c++ ...

  8. animate.css动画种类

    animate.css 一个非常好用的css动画库 Github地址 包括了一下多种动画 1. bounce 弹跳 2. flash 闪烁 3. pulse 放大,缩小 4. rubberBand 放 ...

  9. 将Oracle数据库设置为归档模式及非归档模式

    一.将Oracle数据库设置为归档模式 1)sql>shutdown normal/immediate;2)sql>startup mount;3)sql>alter databas ...

  10. [Jenkins]执行SoapUI脚本,怎样在邮件内容里面嵌入html

    在Editable Email Notification的Default Content里面加入这样一段: ${FILE,path="result-output/overview-summa ...