利用 .NET Core 中的数据保护组件实现限时 Token

前言

在业务开发时,我们常常需要生成有过期时间的 Token 凭证。

比如重置密码,即使被其他人获取到链接,超过指定时间也无法操作,以保证安全性:

c2d6483af9c227d140218bcf79be9315.png

常用的实现方式,可以使用缓存或数据库存储 Token 的过期时间。

今天,我们介绍另一种实现方式。

IDataProtector

.NET Core 中默认提供了一个数据保护组件,可以用来保护我们的数据:

首先,需要在 Startup.cs 中配置使用数据保护组件:

services.AddDataProtection();

然后,在 Controller 的构造函数中注入 IDataProtectionProvider 对象,使用 Provider 创建一个实现 IDataProtector 接口的数据保护器对象:

private readonly IDataProtector _dataProtector;
public TokenController(IDataProtectionProvider dataProtectionProvider)
{_dataProtector = dataProtectionProvider.CreateProtector("Token Protector");
}

然后,就可以使用ProtectUnprotect加解密数据:

[HttpGet]
[Route("Generate")]
public string Generate(string name)
{return _dataProtector.Protect(name);
}[HttpGet]
[Route("Check")]
public string Check(string token)
{return _dataProtector.Unprotect(token);
}

8f3f49fc64130c2d24e03f06e728623e.png

edac30552d51afad8d8d399be2c6c178.png

ITimeLimitedDataProtector

另外,我们可以使用 IDataProtector 接口的 ToTimeLimitedDataProtector 方法创建一个带过期时间的数据保护器:

private readonly ITimeLimitedDataProtector _dataProtector;
public TokenController(IDataProtectionProvider dataProtectionProvider)
{_dataProtector = dataProtectionProvider.CreateProtector("Token Protector").ToTimeLimitedDataProtector();
}

然后,我们就可以在Protect中加入TimeSpan参数,指定加密数据的过期时间:

_dataProtector.Protect(name, TimeSpan.FromSeconds(5));

这样,当前 Token 的有效时间只有5秒,超期后无法解密:

d2d133b23c5e04b169bc430a61d28be1.png

结论

使用 ITimeLimitedDataProtector,可以很方便地生成限时 Token。

想了解更多内容,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CityEngine Web Scene如何在IIS下部署

CityEngine2012新增了发布Web场景的功能,可以通过本地的Web Scene Viewer打开,也可以发布到ArcGIS Online云端进行共享。如下图: 注:3ws场景包制作方法:选中模型->File->Export->Export Models…->CityE…

WPF 使用DrawingVisual绘制高性能曲线图

一、前言项目中涉及到了心率监测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际。同时也尝试过找第三方的开源库,但是因为曲线图涉…

数据结构(Java)——迭代器和列表的实例

感谢Java软件结构与数据结构 John Lewis Joseph chase 著 金名译 0. 迭代器关键概念(补充理解) 【1】迭代器是一个对象,它提供了一种依次访问集合中每个元素的方式。 【2】经常把集合定义为Iterable的,说明需要时可以提供一个迭代…

地理信息科学前沿-[热词]

1. LBS Location Based Service:基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标)&#xff0c…

《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2.2 内存...

本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第1章 ,第1.2.2节,[美] 克里斯托弗库塞克(Christopher Kusek) 著 吕南德特施皮斯(Rynardt Spies&a…

如何检查服务已在依赖注入容器中注册

前言依赖关系注入(DI),是一种在类及其依赖项之间实现控制反转(IoC)的技术。在ASP.NET Core中,依赖关系注入是“一等公民”,被大量使用。但是有时,我们仅仅只需要知道服务是否在依赖注入容器中已注册。比如,不注册使用分…

iOS9 Storyboard unwind segue反回传递事件时机详细步骤

当返回上一个界面且需要上一个界面做某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么我们就用unwind segue吧,而且像1->2->3这样的跳转,3视图可以通过unwind segue方便的返回到1、2任…

ios俩个APP之间跳转、传值

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的。 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString [NSString stringWithFormat:"AppJumpSecond://%",textField.tex…

.Net Core手撸一个基于Token的权限认证

说明权限认证是确定用户身份的过程。可确定用户是否有访问资源的权力今天给大家分享一下类似JWT这种基于token的鉴权机制基于token的鉴权机制,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用,不需要去考虑用户在哪一台服务器…

Mybatis-Generator(MBG)教程与Idea的MBG插件

简介 Mybatis Generator(MBG),下面我们统称为MBG,是一个Mybatis和iBatis的代码生成器。他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。这样减少了项目新建时各种配置对象&#x…

Windows Server 2008 RemoteApp---发布应用程序

本章节一起来体验RemoteApp应用程序发布功能,本功能利用了微软应用程序虚拟化技术,打个比方,我这台电脑上并没有安装Excel2010,但我现再要用Excel2010该怎么办?难道去找Office2010的光盘来安装吗?不用这么麻…

.NET 中密封类的性能优势

.NET 中密封类的性能优势Intro最近看到一篇文章 Performance benefits of sealed class in .NET,觉得写得不错,翻译一下,分享给大家。目前看到的一些类库中其实很多并没有考虑使用密封类,如果你的类型是不希望被继承的&#xff0c…

jQuery-1.9.1源码分析系列(十) 事件系统——事件绑定

事件绑定的方式有很多种。使用了jQuery那么原来那种绑定方式(elem.click function(){...})就不推荐了,原因? 最主要的一个原因是elem.click fn这种方式只能绑定一个事件处理,多次绑定的只会保留最后一次绑定的结果。 看一下jQue…

Windows 8系统平台上应用软件安装心得

1.ArcGIS 10.2安装 需要单独安装.NET 3.5,GIS软件自带的.NET系统不识别,点击360云盘地址进行下载(提取码为:1ed3)。(另外,Win8系统上安装.NET可以参考:http://blog.csdn.net/aijavaer/article/d…

Android视图绘制流程完全解析,带你一步步深入了解View(二)

转自:http://blog.csdn.net/guolin_blog/article/details/16330267 在上一篇文章中,我带着大家一起剖析了一下LayoutInflater的工作原理,可以算是对View进行深入了解的第一步吧。那么本篇文章中,我们将继续对View进行深入探究&…

C# 线程问题之死锁

过多的锁定也会有麻烦。在死锁中,至少有两个线程被挂起,并等待对方解除锁定。由于两个线程都在等待对方,就出现了死锁,线程将无限等待下去。为了说明死锁,下面实例化 StateObject 类型的两个对象,并把它们传…

Matlab图形绘制

1.正余弦曲线 例如自变量从0到10,间隔为0.1的曲线代码如下: 正弦 t 0:.1:10; y sin(t); plot(t,y); 余弦 t 0:.1:10; y cos(t); plot(t,y); 正余弦图形显示如下:

Blazor University (5)组件 — 字面量、表达式和指令

原文链接:https://blazor-university.com/components/literals-expressions-and-directives/字面量、表达式和指令源代码[1]请注意,本节一般不涵盖 Razor 标记。它不会涵盖诸如条件输出、循环等内容。该主题在网络和书籍中的其他地方得到了广泛的介绍。使…

.NET6之MiniAPI(二十七):Metrics

应用的各种Metrics是保证应用健康稳定运行的基础,特别对于一些可用性有所要求的应用,本文介绍prometheus-net这个三方指示库。prometheus-net的工作原理是,在应用内部埋点,通过prometheus采集数据,然后通过grafana把采…

回溯算法之布罗夫卫队(最大团问题)

1、问题 在原始部落中,由于食物缺乏,部落居民经常因为争夺猎物发生冲突,几乎每个居民都 有自己的仇敌。部落酋长为了组织一支保卫部落的卫队,希望从居民中选出最多的居民加入 卫队,并保证卫队中任何两个人都不是仇敌。假设已给定部落中居民间的仇敌关系图,编程 计算构建部落护…