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