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

Posted

技术标签:

【中文标题】如何在 Web API Asp.NET Core 5 中持久化常用数据?【英文标题】:How to persist frequently used data in Web API Asp.NET Core 5? 【发布时间】:2021-07-04 04:16:20 【问题描述】:

我正在使用 ASP.NET Core 5 开发 WebAPI 服务。 如果用户已登录,我将使用 JWT 令牌对每个请求进行身份验证。对于客户端,我使用的是 Next.js。 我正在寻找一种方法来保存经常使用的数据,如用户(用户 ID、电子邮件、用户名、角色),而无需访问数据库。 我已经进行了深入的研究,但大多数答案看起来已经过时了。 我看过的一些替代品

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

【问题讨论】:

【参考方案1】:

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

    用数据打包你的 JWT 是不安全的(正如你所指出的),如果你在每个请求中传递一个非常大的 JWT,也会使你的流量膨胀。您可以通过查看 JWE(JSON Web 加密)来克服第一个问题(安全性)——这只是加密 JWT。但是臃肿问题仍然存在,具体取决于您需要多少信息以及加​​密/解密过程相关的开销。

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

【讨论】:

感谢您的回复,我们的想法相同。您如何看待仅将 userId 保存到 JWT 并查询 DB 以获取 userInformation? 我会说,这取决于。该方法当然有效,但可能无法根据您的应用程序进行扩展。我用不同的应用程序都做过。如果这是一个规模相对较小的情况,那么每次访问数据库以获取用户信息可能没什么大不了的——而且它很简单。但是对于大型应用程序,您的数据库将会受到重创,并可能成为瓶颈——尤其是当您需要针对每个请求提供大量数据时。这就是缓存将有很大帮助的地方。您需要针对您的情况进行性能测试。

以上是关于如何在 Web API Asp.NET Core 5 中持久化常用数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?

如何在 asp.net core web api 中绑定 Json Query 字符串

ASP.NET Core Web API - 如何在中间件管道中隐藏 DbContext 事务?

Asp.Net Core Web API 应用程序:如何更改监听地址?

如何在 ASP.NET Core Web API 中添加两个不同的令牌