【发布时间】:2012-02-24 22:30:18
【问题描述】:
我正在使用 Spring Security 制作一个具有 3 个不同角色的 Web 应用程序:
- 超级支持者
- 部门支持者
- 客户
目前我的应用程序允许 SuperSupporter 使用 SwitchUserFilter“冒充”DivisionSupporter,让他充当那个 DivisionSupporter。如果 DivisionSupporter 遇到一些问题 - 并且需要支持,这是必要的。这听起来可能很奇怪,但它有点像使用 TeamViewer 为朋友检查计算机问题。
此外,现在我们需要赋予DivisionSupporter“冒充”客户的权利,以便DivisionSupporter 可以“支持”客户。
但让我担心的是,如果我们授予 DivisionSupporter 访问j_spring_security_switch_user 的权利,恶意的 DivisionSupporter 可能会使用它来冒充 SuperSupporter(通过发布与相应链接的链接)用户名)。
我想了一个办法来阻止这种情况:
<bean id="switchUserFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter">
<property name="userDetailsService" ref="userDetailsService" />
<property name="switchUserUrl" value="/j_spring_security_switch_user" />
<property name="exitUserUrl" value="/j_spring_security_exit_user" />
<property name="targetUrl" value="/checkRole.html" />
</bean>
在/checkRole action(即targetUrl)中,我再次检查:如果用户角色是SuperSupporter并且他冒充某人,应用程序会将他发送到/j_spring_security_exit_user(因为SuperSupporter不需要模仿
自己)。
虽然看起来可行,但我担心恶意用户可能会找到绕过这堵墙的方法,从而使我们的系统处于危险之中。
我认为 SpringSecurity 可能有办法解决这个需求,但仍然无法找到它。这种方式真的安全吗? DivisionSupporter 能否使用我当前的解决方案模拟 SuperSupporter?
更重要的是,有没有更好的方法来解决这个问题?
任何帮助将不胜感激。
【问题讨论】:
标签: java security spring spring-mvc spring-security