我对“无状态”的概念有点困惑。我有一种情况,我的应用是基于无状态架构的。身份验证是使用JWT令牌进行的(没有使用KeyCloack和OpenAM这样的身份验证提供程序)。
这是一个简单的机制,前端登录到后端,后端用一个包含用户数据(包括ID,角色...)的JWT令牌应答,.The令牌将在每个http请求的头部发出。
现在涉及到了其他安全概念(除了角色之外,我们还在数据上添加了安全性)。我的问题是,即使有良好的安全配置(创建组,在组中隐藏细节,只将组id放在令牌中),大小也会快速增长。
因为我处于无状态上下文中,所以每个http请求都必须提供安全上下文,以便服务器能够应答它。
大多数服务器都有8K标头大小的限制,据我所知,建议将JWT令牌放在标头中。
我的问题是如何在不影响的情况下工作:-无状态体系结构:服务器不能存储任何会话信息。- Identity :要执行请求,服务器必须知道用户可以访问哪些角色和数据范围- Header限制: 8K (我可以增加,但我不认为这是一个好主意)。
谢谢你的帮助。
发布于 2018-09-13 17:26:51
如果我误解了你的实际问题,我很抱歉,但你可以做一个拦截器,如果令牌存在于localStorage中,它将附加到头部。如果你想通过角色限制用户的能力,你只需要在一个单例(服务)中存储某种类型的currentUser
对象,在那里你将拥有所有的数据,比如角色等。所以你可以在组件中获取这些数据,并检查是否允许currentUser进行更改。在这种情况下,您可以将用户操作限制为不允许发出请求,这只允许授权/授权的用户。此外,如果有一些路由不应该对所有用户都可访问,而只能由管理员访问(例如),那么您可以创建一个路由守卫,并在canActivate
中的路由上使用它。我想听更多细节,以防我真的误解了你的问题。而且,只有当security data
在JWT令牌中提供,或者您能够请求它并将其存储在您的currentUser
对象中(该对象将在logout()
事件时被清除),或者当服务器将响应401,403错误时,这一切才有意义。希望这里至少有一些观点能有所帮助。
https://stackoverflow.com/questions/52310418
复制相似问题