我对“无静态”概念感到困惑。我的情况是我的应用程序基于无状态架构。使用JWT令牌进行身份验证(不使用像KeyCloack和OpenAM这样的身份验证提供程序)。
这是一个简单的机制,前端记录到后端,后端使用包含用户数据(包括ID,角色......)的JWT令牌进行回答。令牌将在每个http请求的标头中发出。
现在涉及其他安全概念(除了我们在数据上添加安全性的角色)。我的问题是,即使安全配置良好,大小也可以快速增长(创建组,隐藏组内的详细信息,只在组中放置组ID)。
由于我处于无状态上下文中,因此每个http请求都必须提供安全上下文,以便服务器可以回答它。
大多数服务器都有8K的头大小限制,据我所知,建议将JWT令牌放在头中。
我的问题是如何在不妥协的情况下完成这项工作: - 无状态架构:服务器不得存储任何会话信息。 - 身份:要执行请求,服务器必须知道用户可以访问哪些角色和DATA范围 - 标头限制:这是8K(我可以增加,但我不认为这是一个好主意)。
谢谢您的帮助。
很抱歉,如果我误解了你的实际问题,但你可以制作一个拦截器,如果它存在于localStorage中,它会将标记附加到标题。如果你想按角色限制用户能力,你只需要在单例(服务)中存储某种currentUser
对象,你将拥有所有数据,如角色等。所以你可以在组件中获得这些数据,并检查是否允许currentUser进行更改。在这种情况下,您可以将用户操作限制为不允许仅允许授权/授予用户的make请求。此外,如果有一些路由不是所有用户都可以访问的,但仅限于管理员(例如),那么您可以制作路由保护并在canActivate
路由中使用它。想听一点细节,以防万一我真的误解了你的问题。是的,只有在jwt令牌中提供security data
,或者你能够请求它并存储在currentUser
事件中将被清除的logout()
对象,或者服务器将响应401,403错误时,这一切都有意义。希望至少这里的一些要点会有所帮助。