Asp.net core 带角度前端的ASP.NET核心数据保护API

Asp.net core 带角度前端的ASP.NET核心数据保护API,asp.net-core,asp.net-core-webapi,data-protection,Asp.net Core,Asp.net Core Webapi,Data Protection,我目前正在使用Angular 8前端和ASP.NET核心后端开发SPA web应用程序。我正在使用.NET核心数据保护Api来保护对象的ID,然后再将它们返回给angular客户端。我的应用程序中有一个页面,它调用Api来检索“类别” 返回的类别列表中的每个类别都有一个“Id”属性,该属性是受保护的字符串(使用.NET核心数据保护Api进行保护)。这些类别是页面上下拉列表的数据源。“Id”属性是下拉列表中每个选项的“value”属性 在同一页面上,我有另一个api调用来获取登录用户所选的类别。此

我目前正在使用Angular 8前端和ASP.NET核心后端开发SPA web应用程序。我正在使用.NET核心数据保护Api来保护对象的ID,然后再将它们返回给angular客户端。我的应用程序中有一个页面,它调用Api来检索“类别”

返回的类别列表中的每个类别都有一个“Id”属性,该属性是受保护的字符串(使用.NET核心数据保护Api进行保护)。这些类别是页面上下拉列表的数据源。“Id”属性是下拉列表中每个选项的“value”属性

在同一页面上,我有另一个api调用来获取登录用户所选的类别。此类别与上面提到的“类别”是相同的对象(以及受保护的Id属性)

我现在要做的是为用户设置下拉列表中的“selected category”的选定值。由于我使用的是数据保护Api,下拉列表中的加密id都将与“选定类别”id不同,并且没有一个与用户的“选定类别”id匹配。因此,在这一点上,我没有办法选择下拉列表中的选项


因此,问题是,使用.NET Core DataProtection Api,如何实现单独的Api调用,并在每个调用中确保在保护特定整数值时,得到的受保护字符串(如果ID相同)是相同的,因此,我可以在客户端上成功地比较两者。

我不会在运行时使用数据保护API加密/保护整数值。那不会给你一个很好的表现。一个更好的选择是在数据库中有一个GUID列,在前端使用,在内部使用整数ID

因此,基本上,添加一个新列并将其设置为GUID,并将其用作API用户的类别id

我不明白为什么你需要为下拉框加密你的ID值。你试图阻止的攻击向量是什么?

因为如果在后端进行正确的输入验证和身份验证/授权检查,这将永远不会成为问题。我从未见过有人需要像您描述的那样加密ID值以呈现给用户


例如,可以使用GUID表示项目(如类别、用户ID、资源ID)来防止。但这不是加密。

谢谢您的回复,但我认为这不符合目的,我不想要一个静态标识符,有人可以复制它,它永远不会改变。每次发出请求/响应时,数据保护api都会更改受保护的字符串。我认为使用数据保护api更安全一些,因为它的值永远不会与前面的值相同。你能解释一下为什么数据保护Api没有给你带来好的性能吗?到目前为止,我对它没有任何问题。在生产规模上,对单个值进行实时加密是个坏主意,因为这需要时间,而且可能不值得。我更新了我的答案,希望这是一个可以接受的答案。