【问题标题】:JWT / Stateless Architecture and large security DataJWT / 无状态架构和大安全数据
【发布时间】:2019-02-17 23:52:20
【问题描述】:

我对“无状态”概念有点困惑。我有一种情况,我的应用程序基于无状态架构。使用 JWT 令牌进行身份验证(不使用 KeyCloack 和 OpenAM 等身份验证提供程序)。

这是一个简单的机制,前端记录到后端,后端使用包含用户数据(包括 ID、角色...)的 JWT 令牌进行回答。令牌将在每个 http 请求的标头中发出。

现在涉及到其他安全概念(除了我们在数据上添加安全性的角色)。我的问题是,即使有良好的安全配置(创建组、隐藏组内的详细信息、仅将组 ID 放入令牌中),大小也会快速增长。

由于我处于无状态上下文中,因此每个 http 请求都必须提供安全上下文,以便服务器可以响应它。

大多数服务器都有 8K 标头大小限制,据我所知,建议将 JWT 令牌放在标头中。

我的问题是如何在不妥协的情况下完成这项工作: - 无状态架构:服务器不得存储任何会话信息。 - 身份:要执行请求,服务器必须知道用户可以访问哪些角色和数据范围 - 标头限制:8K(我可以增加,但我认为这不是一个好主意)。

感谢您的帮助。

【问题讨论】:

    标签: angular security jwt stateless


    【解决方案1】:

    抱歉,如果我误解了您的实际问题,但您可以制作一个拦截器,如果它存在于 localStorage 中,它将附加到标头中。如果您想按角色限制用户能力,您只需将某种currentUser 对象存储在一个单例(服务)中,您将在其中拥有所有数据,如角色等。所以您可以获得这些数据在组件中,并检查是否允许 currentUser 进行更改。在这种情况下,您可以限制用户操作以不允许只允许授权/授权用户的请求。此外,如果有一些路由不应该被所有用户访问,而只能由管理员访问(例如),那么您可以创建一个路由保护并在canActivate 的路由上使用它。想听听更多细节,以防我真的误解了你的问题。是的,这一切只有在 jwt 令牌中提供 security data 时才有意义,或者您能够请求它并将其存储在您的 currentUser 对象中,该对象将在 logout() 事件中被清除,或者当服务器将以 401 响应时, 403 错误。希望这里的至少一些要点会有所帮助。

    【讨论】:

    • 嗨,我的问题出在服务器端。由于我的后端公开了 REST 服务,我不能依赖前端来完成限制工作。
    • 在提交 REST 之前,“服务器”必须检查安全上下文。今天在签名/加密令牌中提供了一些安全数据,并且它可以工作。但我的问题是令牌大小越来越大
    猜你喜欢
    • 2016-11-28
    • 2019-04-18
    • 2020-10-11
    • 2018-10-06
    • 1970-01-01
    • 2016-03-25
    • 2017-10-11
    • 2015-11-05
    • 2013-07-07
    相关资源
    最近更新 更多