【发布时间】:2017-08-28 12:58:45
【问题描述】:
我正在开发一个由 Spring Security 插件驱动的 Grails 3 Web 应用程序,它已经大量使用 @Secured 注释来根据单个登录用户的权限来保护控制器和操作。
登录当前通过通常的用户名/密码对进行管理。
现在出现了一个新要求,涉及自定义请求标头,具有一种“授权令牌”作为值:
- 此令牌标识一组用户(我们称之为团队)
- 如果此令牌被识别为有效,与 DB 匹配,则整个应用程序应表现为预定义用户(我们称其为 John,团队 的一部分)已登录。从这个意义上说,它应该充当预身份验证。该用户将拥有自己的角色,因此应用程序会做出相应的响应,就好像 John 会使用自己的用户名/密码登录一样。
- 如果无法识别令牌,则必须返回 401 状态。
- 如果令牌没有通过,应用程序必须有它当前的行为,令牌管理应该被认为是可选的,必须完全不影响当前的实现。
我考虑定义一个自定义过滤器(我还查看了这个post,但是它有不同的要求),但我什至无法确定:
- 这项任务的可行性
- 过滤器是否是最好的方法(但我猜是因为拦截器触发得太晚了,我需要在 Spring Security 发挥作用之前评估一些额外的逻辑)
- 可能是扩展的最佳过滤器
欢迎提出任何建议!提前致谢
【问题讨论】:
-
你看过 JWT 和 spring-security-rest 吗? plugins.grails.org/plugin/grails/spring-security-rest
-
感谢@erichelgeson 的建议,但我觉得它不符合我的要求:当 team 令牌标头存在时,基本上不应该发生显式用户身份验证(没有用户名/密码),而应该自动生成 John 的用户会话。
标签: authentication grails spring-security filter