保护我方Id | ASP.NET Core Web API使用加密Id

前言

上次,我们介绍了hashids.net,可以将数值型Id加密成无意义的字符串,但是通过这些字符串又可以反向映射出真实的Id以供内部使用。比如B站的播放链接https://www.bilibili.com/video/BV1xK4y1VXXX应该就是这种实现方式。

但是,我们希望在ASP.NET Core Web API实现中使用的还是真实的数值型Id,方便操作;而在对外输入/输出时对Id进行自动加解密转换,保证安全。

类似这样:

//请求
http://xxx.com/user/WwYQ//id=12345
public UserDto Get(int id)

那么,应该如何实现呢?

自定义序列化

在输出时,我们需要自动加密Id。

在这里,通过编写一个自定义JsonConverter来实现:

public class HashIdJsonConverter : JsonConverter<int>
{Hashids hashids = new Hashids("公众号My IO");//加盐public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){var str = JsonSerializer.Deserialize<string>(ref reader, options);return hashids.Decode(str)[0];}public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options){JsonSerializer.Serialize(writer, hashids.Encode(value), options);}
}

运行程序,发现我们的Id被正常加密:

public class UserDto
{[JsonConverter(typeof(HashIdJsonConverter))]public int Id { get; set; }public string Name { get; set; }
}[HttpGet]
public IEnumerable<UserDto> Get()
{return new[] { new UserDto { Id = 12345, Name = "用户12345" } };
}

1e79af50ea6932b266b64e3a6353ee61.png

自定义模型绑定

在输入时,我们需要自动解密Id。

在这里,通过编写一个自定义IModelBinder来实现:

public class HashIdModelBinder : IModelBinder
{Hashids hashids = new Hashids("公众号My IO");//加盐public Task BindModelAsync(ModelBindingContext bindingContext){var modelName = bindingContext.ModelName;var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);var str = valueProviderResult.FirstValue;bindingContext.Result = ModelBindingResult.Success(hashids.Decode(str)[0]);return Task.CompletedTask;}
}

运行程序,发现我们的Id被正常解密:

[HttpGet("{id}")]
public  UserDto Get([ModelBinder(typeof(HashIdModelBinder))]int id)
{return new UserDto { Id = id, Name = "用户"+id }  ;
}

85c94b5db22e03b244e629f322134083.png

结论

在本文中,通过实现自定义序列化和模型绑定,我们实现了ASP.NET Core Web API使用加密Id,而在内部使用的还是真实的数值型Id。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

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

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

相关文章

用java写注册表单_利用HTML表单标签编写一个注册页面

今天我们来写一个注册页面form表单先来利用表单标签制作一个简单的注册页面,给大家说说标签的结构:页面结构大体就是这样子的~利用HTML表单标签编写一个注册页面表单标签:所有需要提交到服务器端的表单项必须使用包起来~form标签的属性:action:整个表单提交的位置(可以是一个页…

odm操作指南

odm操作指南 odm是由一组对象类和对象所组成的数据库。对象类相当于oracle数据库中的table&#xff0c;由odmcreate创建&#xff0c;删除可以使用odmdrop&#xff0c;对象就相当于table中的row或叫记录&#xff0c;可以使用odmadd命令加入对象&#xff0c;使用odm delete命令删…

蓝桥杯java龟兔赛跑_算法-蓝桥杯习题(一)

1 /*2 基础练习 十六进制转八进制34 问题描述5 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。6 输入格式7 输入的第一行为一个正整数n (1<n<10)。8 接下来n行&#xff0c;每行一个由0~九、大写字母A~F组成的字符串&#xff0c;表示要转换的十六进制正整数&…

我被Dapr点燃

Dapr的热度个人认为才刚刚热起来&#xff0c;9月份我写了Dapr .NET Core实战一共10篇&#xff0c;从基础概念到简单的实战&#xff0c;但是有很多人感兴趣&#xff0c;具体表现在我个人维护的QQ群&#xff0c;人数从80人左右&#xff0c;增加到了155&#xff0c;将近增加了1倍…

学习Asp.net MVC相关资料

1. 微软官方网站 http://www.asp.net/mvc/tutorials 2. 博客园教程页面 http://kb.cnblogs.com/zt/mvc/转载于:https://www.cnblogs.com/donlxn/archive/2012/04/16/2452872.html

Http Only Cookie保护AccessToken

【导读】JWT认证方式目前已被广泛使用&#xff0c;一直以来我们将token放在请求头中的Authorization中&#xff0c;若通过此种方式&#xff0c;一旦token被恶意窃取&#xff0c;攻击者可肆意对用户可访问资源进行任意索取我们大多都是通过登录成功后&#xff0c;响应AccessToke…

java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...

匿名用户1级2015-06-06 回答楼主你好&#xff0c;先说一下我对这道题目的认识吧。1、输入10个数&#xff0c;一次按顺序插入。核心考察的应该是2点1) 给定一个数组和一个整数n&#xff0c;找到这个数应该插入的位置。2) 插入这个数&#xff0c;其实就是从这个位置往后的所有元素…

当女朋友生气了而你却没发现 !!!

1 当女朋友生气了而你却没发现。。诶&#xff0c;你咋不吃呢&#xff1f;2 会说话的尾巴。。尾巴&#xff1a;人呢&#xff01;&#xff01;3 小树枝&#xff1a;生命中不能承受之重&#xff01;心疼小树枝&#xff01;4 土耳其冰淇淋小哥终于被反杀了&#xff01;天道好轮…

【转载】 quartus中调用modelsim仿真的方法

http://blog.sina.com.cn/s/blog_4b2a5d8401000910.html http://hi.baidu.com/asin28/blog/item/c4c1218d8ecd51c0fc1f104d.html/cmtid/20f1d8cd7339c810be09e6b5 转载于:https://www.cnblogs.com/mrightt/archive/2011/05/08/2040417.html

弱引用什么时候被回收_Java基础 强引用、弱引用、软引用、虚引用

前言在ThreadLocal源码中&#xff0c;其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc。Java中提供这四种引用类型主要有两个目的&#xff1a;第一是可以让程序员通过代码的方式决定某些对象的生命周期&#xff1b;第二是有利于JVM进行垃圾回收。强引用(StrongReference)…

再译《A *路径搜索入门》之四

2019独角兽企业重金招聘Python工程师标准>>> ■在A *方法总结 Summary of the A* Method 好了&#xff0c;现在你通过解释已经走了&#xff0c;让我们奠定了一步一步的方法&#xff0c;在同一个地方&#xff1a; Okay, now that you have gone through the explanat…

记一次 .NET 某电商定向爬虫 内存碎片化分析

一&#xff1a;背景 1. 讲故事上个月有位朋友wx找到我&#xff0c;说他的程序存在内存泄漏问题&#xff0c;寻求如何解决&#xff1f; 如下图所示&#xff1a;从截图中可以看出&#xff0c;这位朋友对 windbg 的操作还是有些熟悉的&#xff0c;可能缺乏一定的实操经验&#xff…

php 合成图片 透明,2020-05-19 php实现透明png多图合成

图片合成的流程一般是&#xff0c;获取图像资源——合成——输出。png图片&#xff0c;一般就用imagecreatefrompng()获取资源。不过这个资源获取后是有白底的。所以需要用imagesavealpha()进行图像处理&#xff0c;得到包含有透明背景的图像。//原始图像$dst "img/1.png…

一个古怪的VISTA网络问题解决的坎坷经历

今天下午BOSS突然找我&#xff0c;说他的笔记本无线网络今天频繁的掉线&#xff0c;问我到底是怎么回事&#xff0c;我初步估计是TPLink无线路由器的连接数过多造成&#xff0c;也就这么说了&#xff0c;BOSS马上生气的说&#xff0c;把其他无线用户都T了&#xff0c;让他上网干…

ArcEngine 没有Esri.ArcGis.GeoAnalyst 命名空间

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid69977&extrapage%3D1&ordertype1 AE安装的时候分为Core和Extension. Esri.ArcGis.GeoAnalyst位于Extension里面. (1)确保安装的时候是完全安装 (2) 转载于:https://www.cnblogs.com/imihiroblog/archive/2012/04/1…

微信功能“拍一拍”,都有谁在“拍”你?

全世界只有3.14 % 的人关注了爆炸吧知识微信新功能总在悄咪咪更新&#xff0c;“拍一拍”一出&#xff0c;很多小伙伴都会收到各种群里面千奇百怪的“拍一拍”&#xff0c;到底都是谁在偷偷关注你&#xff1f;真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内…

sql 触发器_一键生成某个sql的html--记录执行计划、统计信息、触发器等

概述当你获得某个sql的sql_id时&#xff0c;怎么去一键获得这个sql的一些信息呢&#xff0c;例如列的情况、执行计划等等..脚本有点长&#xff0c;建议大家用电脑来看..下面用一个简单测试来演示下&#xff0c;附脚本领取方式。1、获取sql_idSQL> select a.* from (select S…

C字符数组赋值(转)

举例如下&#xff1a; char a[10];1、定义的时候直接用字符串赋值char a[10]"hello";注意&#xff1a;不能先定义再给它赋值&#xff0c;如 char a[10]; a[10]"hello";这样是错误的&#xff01; 2、对数组中字符逐个赋值char a[10]{h,e,l,l,o}; 3、利用str…

别等了,全面「远程办公」凉了

大家好&#xff0c;我是Z哥。这是一篇迟到的文章。具体原因是&#xff0c;昨天定时发送的时候没注意已经过了0点了&#xff0c;习惯性的选了明天11点45&#xff0c;然后才发现实际变成10月9日的11&#xff1a;45了。赶紧取消重新发一下。好了&#xff0c;回到正文。不知道你是否…

PHP做闹钟APP,8款超好用的闹钟APP,专治各种赖床

这是什么神仙APP&#xff0c;我再也不怕冬天起不了床&#xff01;有了它们&#xff0c;再也不怕懒床迟到了&#xff01;好用到爆&#xff01;可爱女生闹钟(超可爱的用户界面)这界面真是太可爱了&#xff0c;软萌妹子必备啊。推荐指数&#xff1a;★★★★怪物闹钟(玩游戏才能关…