Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Web API Asp.NET Core 5中持久化常用数据?_Asp.net_Asp.net Core_Redis_Jwt_Asp.net Core Webapi - Fatal编程技术网

如何在Web API Asp.NET Core 5中持久化常用数据?

如何在Web API Asp.NET Core 5中持久化常用数据?,asp.net,asp.net-core,redis,jwt,asp.net-core-webapi,Asp.net,Asp.net Core,Redis,Jwt,Asp.net Core Webapi,我正在使用ASP.NETCore5开发一个WebAPI服务。 如果用户登录,我将在每个请求上使用JWT令牌进行身份验证。对于客户端,我使用Next.js。 我正在寻找一种方法来保存经常使用的数据,如用户(userId、电子邮件、用户名、角色),而不必跳转到数据库。 我做了深入的研究,但大多数答案看起来都过时了。 我寻找的一些替代方案 使用JWT有效负载保存用户对象。(看起来不太安全) 例如,使用缓存系统Redis(这看起来是最好的选择之一,但它耗时且需要大量资源) 你们还有其他建议吗 这是一个非

我正在使用ASP.NETCore5开发一个WebAPI服务。 如果用户登录,我将在每个请求上使用JWT令牌进行身份验证。对于客户端,我使用Next.js。 我正在寻找一种方法来保存经常使用的数据,如用户(userId、电子邮件、用户名、角色),而不必跳转到数据库。 我做了深入的研究,但大多数答案看起来都过时了。
我寻找的一些替代方案

  • 使用JWT有效负载保存用户对象。(看起来不太安全)
  • 例如,使用缓存系统Redis(这看起来是最好的选择之一,但它耗时且需要大量资源) 你们还有其他建议吗

  • 这是一个非常主观的话题,但这是我的两分钱:

  • 用数据打包JWT是不安全的(正如您所指出的),并且如果您在每个请求中都要传递一个非常大的JWT,那么也会导致流量膨胀。您可以通过研究JWE(JSON Web加密)来克服第一个问题(安全性)——这只是对JWT进行加密。但是膨胀的问题将取决于您需要多少信息,以及与加密/解密过程相关的开销

  • 缓存是解决您问题的经典解决方案,而Redis是最常见的实现之一(如果您在Azure上托管,则更容易实现)。如果您能够处理费用(这在很大程度上取决于缓存的数据量和客户端连接计数),那么使用托管Redis缓存可以简化此过程。如果您将来需要添加更多要缓存的数据或更改缓存的数据,那么这将具有更大的可扩展性


  • 谢谢你的回复,我们有相同的想法。您如何看待只将userId保存到JWT中并查询数据库以获取userInformation?我会说,这要视情况而定。这种方法当然有效,但根据应用程序的不同,其可伸缩性可能会有所不同。我用不同的应用程序都做过。如果这是一个相对低规模的情况,那么每次点击数据库获取用户信息可能不是什么大不了的事——而且这是直接和简单的。但对于大型应用程序,您的数据库将受到冲击,并可能成为一个瓶颈——特别是当您在每个请求中需要大量数据时。这就是缓存将起到很大作用的地方。您需要针对您的情况进行性能测试。