JWT /无状态架构和大型安全数据

时间:2018-09-13 09:13:15

标签: angular security jwt stateless

我对“无国籍”概念有些困惑。我遇到的情况是我的应用基于无状态架构。使用JWT令牌进行身份验证(不使用诸如KeyCloack和OpenAM之类的身份验证提供程序)。

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

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

由于我处于无状态上下文中,因此每个http请求都必须提供安全上下文,以便服务器可以对其进行回答。

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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