【问题标题】:Should Angular client store user roles in local storage?Angular 客户端应该将用户角色存储在本地存储中吗?
【发布时间】:2020-08-21 23:25:01
【问题描述】:

在我的 Angular 应用程序中,根据登录的用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路线来授予或限制功能。 目前在成功登录时,我的 .NET Core API 返回一个 JWT 令牌以及用户的角色并将其存储在本地存储中。然后我用它来显示我的菜单(例如)。 我只是怀疑这是最佳实践,因为它暴露了我的用户角色,我不确定如果有人在本地存储中手动更改它会发生什么。

有没有更好/更安全的方法来实现这一点?

如果您需要更多详细信息,请告诉我。谢谢

【问题讨论】:

    标签: angular .net-core local-storage roles


    【解决方案1】:

    您无法手动更改您的 JWT 令牌,因为它是使用私钥(或密钥)生成的。如果没有私钥,您将无法创建具有更新角色的新令牌。所以用户无法做到这一点。他当然可以解码令牌,但他不能编码有效的新令牌

    【讨论】:

    • 对,我知道 JWT 是安全的。但是在我的本地存储中,我有以下内容:(请参阅原始问题中的图片)这可以吗?
    • 不,您应该只在本地存储中保留原始 JWT 令牌,解码后的版本应该存储在应用程序中的某种身份验证服务中。因为如果你使用这个解码的对象,用户可以很容易地替换每个值。总结一下,不要将解码后的JWT保存到LocalStorage,只在身份验证服务中解码JWT,并将这个解码后的对象保存为私有值,这样用户就无法访问
    • 但这仅在您在前面检查此角色时才危险 - 例如访问某些路线,显示管理按钮或类似的东西 - 因为后端会知道这个具有此 JWT 令牌的用户不'没有这个角色
    猜你喜欢
    • 2021-05-03
    • 2017-10-08
    • 2021-04-17
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多