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

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

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

【问题讨论】:

    标签: asp.net asp.net-core redis jwt asp.net-core-webapi


    【解决方案1】:

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

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

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

    【讨论】:

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