基于ASP.NET Core數(shù)據(jù)保護(hù)生成驗(yàn)證token示例
ASP.NET Core Data Protection 不僅提供了非對(duì)稱加密能力,而且提供了靈活的秘鑰存儲(chǔ)方式以及一致的加解密接口(Protect與Unprotect)。Session中用到了它,Cookie驗(yàn)證中用到了它,OpenIdConnect中也用到了它。。。當(dāng)然你也可以在應(yīng)用開發(fā)中使用它,比如這篇博文中就是用它生成激活帳戶的驗(yàn)證token。
首先在 Startup.ConfigureServices() 中注冊(cè) DataProtection 服務(wù)(注入 IDataProtectionProvider 接口的實(shí)現(xiàn)):
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection();
}
然后在使用 DataProtection 的類的構(gòu)造函數(shù)中添加 IDataProtectionProvider 接口,并用該接口創(chuàng)建 DataProtector ,接著以此創(chuàng)建 SecureDataFormat ,最后用 SecureDataFormat.Protect() 方法生成激活帳戶的 token ,用 SecureDataFormat.Uprotect() 解密 token,完整的示例代碼如下:
public class HomeController : Controller
{
private readonly ISecureDataFormat<string> _dataFormat;
public HomeController(IDataProtectionProvider _dataProtectionProvider)
{
var dataProtector = _dataProtectionProvider.CreateProtector(typeof(HomeController).FullName);
_dataFormat = new SecureDataFormat<string>(new StringSerializer(), dataProtector);
}
public string GenerateToken()
{
return _dataFormat.Protect(Guid.NewGuid().ToString() + ";" + DateTime.Now.AddHours(10));
}
public string DecryptToken(string token)
{
return _dataFormat.Unprotect(token);
}
private class StringSerializer : IDataSerializer<string>
{
public string Deserialize(byte[] data)
{
return Encoding.UTF8.GetString(data);
}
public byte[] Serialize(string model)
{
return Encoding.UTF8.GetBytes(model);
}
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET?Core使用EF創(chuàng)建模型(包含屬性、排除屬性、主鍵和生成值)
- ASP.NET Core自動(dòng)生成小寫破折號(hào)路由的實(shí)現(xiàn)方法
- ASP.NET Core 5中如何生成PDF文檔
- Asp.Net Core使用swagger生成api文檔的完整步驟
- 詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)
- Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺(tái)包
- Asp.net core WebApi 使用Swagger生成幫助頁實(shí)例
- asp.net core實(shí)現(xiàn)在線生成多個(gè)文件將多個(gè)文件打包為zip返回的操作
相關(guān)文章
asp.net XMLHttpRequest實(shí)現(xiàn)用戶注冊(cè)前的驗(yàn)證
用戶注冊(cè)前的驗(yàn)證,提高用戶體驗(yàn)。2009-10-10
asp.net 定時(shí)間點(diǎn)執(zhí)行任務(wù)的簡易解決辦法
這里的定時(shí)間點(diǎn)執(zhí)行任務(wù),指的是每天的某個(gè)時(shí)間執(zhí)行一項(xiàng)任務(wù)。2009-12-12
.net平臺(tái)的rabbitmq使用封裝demo詳解
這篇文章主要針對(duì)rabbitmq學(xué)習(xí)后封裝RabbitMQ.Client的一個(gè)分享,文章最后,我會(huì)把封裝組件和demo奉上,對(duì).net平臺(tái)的rabbitmq使用封裝相關(guān)知識(shí)感興趣的朋友一起看看吧2021-09-09
用C#中的params關(guān)鍵字實(shí)現(xiàn)方法形參個(gè)數(shù)可變
個(gè)人認(rèn)為,提供params關(guān)鍵字以實(shí)現(xiàn)方法形參個(gè)數(shù)可變是C#語法的一大優(yōu)點(diǎn)。在方法形參列表中,數(shù)組類型的參數(shù)前加params關(guān)鍵字,通??梢栽谡{(diào)用方法時(shí)代碼更加精練2012-01-01
ASP.NET 5中使用AzureAD實(shí)現(xiàn)單點(diǎn)登錄
本文給大家介紹的是在ASP.NET 5中使用AzureAD實(shí)現(xiàn)單點(diǎn)登錄的方法和示例,有需要的小伙伴可以參考下。2015-07-07
DataSet.Tables[].Rows[][]的用法詳細(xì)解析
以下是對(duì)DataSet.Tables[].Rows[][]的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09
asp.net中使用cookie與md5加密實(shí)現(xiàn)記住密碼功能的實(shí)現(xiàn)代碼
雖然.net內(nèi)置了登陸控件,有記住密碼的功能,但還是想自己實(shí)踐一下,以下代碼主要應(yīng)用了COOKIE,包括安全加密的過程等2013-02-02
使用.NET存儲(chǔ)XML數(shù)據(jù)的方法
使用.NET存儲(chǔ)XML數(shù)據(jù)的方法...2007-04-04

