C# ASP.NET MVC - 在 Owin cookie 中存储组权限

C# ASP.NET MVC - Storing group permissions in Owin cookie

我正在为 MVC5 Web 使用无状态设计 API 2,ASP.NET 应用程序。

用户角色由管理员通过选择权限创建。 应用程序中的每个用户都被分配了一个自定义用户角色,一个角色可以在用户之间共享。

Razor 视图是根据用户角色中的权限构建的。 MVC 和 API 控制器可用,具体取决于用户角色中的权限。

对于对服务器的每个请求,都需要处理用户权限。 我可以想到两种方法来做到这一点:

  1. 将用户角色的 ID 存储在角色声明中,并执行数据库查找以检索每个 page-load/request 的权限。
  2. 在用户登录时,检索分配给用户角色的所有权限,将它们序列化为 JSON 并将它们存储在身份验证声明中。然后在每个 page-load/request 处,将 JSON 反序列化回对象并处理权限。

以下哪个选项更好?

选项 1 比选项 2 慢很多。 将权限存储在cookie中是否存在安全风险? 是否有更好或替代的解决方案,既快速又安全。

在 cookie 中存储权限和其他敏感数据总是一个非常糟糕的主意,因为它们很容易被操纵。信任 cookie 需要额外的服务器端检查,这违背了将其存储在 cookie 中的目的。

你最好只信任你控制下的数据,也就是你数据库中的数据。

根据您的应用程序,只有当您确实需要访问权限时,如果性能影响太大,才延迟评估权限可能很有用。请记住,您可以使用 Redis 之类的东西来显着提高性能。

再次重申,根据您的应用,我可能会选择选项 1,因为它更安全。