spring security(3.0.x)和用户模仿

Eri*_*rik 8 java impersonation spring spring-security

在我的Web应用程序中,有时经过身份验证的管理员可能想要冒充系统的另一个有效用户而无需知道该用户的密码.

如何使用Spring Security为管理员用户提供模拟系统正常(非管理员)用户的能力?

Spring Security文档对此保持沉默,我无处可寻.当然有人必须解决这个问题.

谢谢!

And*_*ite 5

它在Spring Security 3Spring Security 4文档中恰当地命名为"Run-As Authentication Replacement".

AbstractSecurityInterceptor能够在安全对象回调阶段临时替换SecurityContext和SecurityContextHolder中的Authentication对象.


小智 3

我相信在 Spring Security 中执行此操作的推荐方法是使用域访问控制列表,请参阅 GrantedAuthoritySid @

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html

但是,冒充另一个用户不仅仅是拥有“委托身份”,您还应该考虑对日志记录的影响:

  • 您希望您的日志记录显示为原始用户或模拟用户(或两者兼而有之?)
  • 您是否希望“模拟”仅显示被模拟用户看到的内容,或者原始用户和被模拟用户的权限超集?

另一种可能性是创建“登录身份”功能,这实际上会更改当前会话的主体身份,或者使用模拟身份启动新会话。

在上述所有情况中,您可能会无意中引发安全问题 - 所以我认为这就是为什么模拟风格的功能并不常见的原因。相反,设计趋势是基于角色的访问控制 (RBAC) 或基于属性的访问控制 (ABAC)。使用 RBAC / ABAC,您可以创建委托样式功能,在其中创建委托属性/角色 - 在需要显示委托的源/目标(例如审计日志)的特殊情况下,您可以将它们作为极端情况处理。