仅使用 Spring-Security(或)Spring 进行授权
Posted
技术标签:
【中文标题】仅使用 Spring-Security(或)Spring 进行授权【英文标题】:Authorization using Spring-Security (or) Spring only 【发布时间】:2014-03-09 23:22:43 【问题描述】:我有关于授权和弹簧安全的问题。为了在我的一项服务中实现授权检查(在面向服务的架构环境下),我试图查看是否可以使用 Spring-Security。在浏览 Spring Security 文档时,我读到 here Spring Security 在内部使用 Spring 的 AOP。
参考:您可以选择使用 AspectJ 或 Spring AOP 执行方法授权,也可以选择使用过滤器执行 Web 请求授权。您可以同时使用零个、一个、两个或三个这些方法。主流的使用模式是做一些web请求授权,再加上service层的一些Spring AOP方法调用授权。
我们已经在我们的服务实现中使用了 Spring AOP。在我的例子中,将到达我的 RESTful 服务的请求将携带一个自定义构建的令牌对象,应该对其进行处理以执行授权检查。
基于此,我想了解我是否可以简单地使用 Spring 并创建一个 Aspect 来捕获入站请求、提取和处理关联的(自定义构建的)令牌并根据结果继续/拒绝请求?鉴于通信通道已经使用 HTTPS 保护,我是否需要 spring-security ?
谢谢,
SGSI
【问题讨论】:
【参考方案1】:对于类似的情况,我们很久以前做过以下操作:
-
使用 HTTP 过滤器从每个请求的 HTTP 标头中提取令牌。
将提取的标头存储到线程上下文中。
围绕服务方法调用添加了一个方面,以检查令牌的线程上下文。
这个策略对我们很有效。在过去的很多年里,我一直在使用 Spring Security,因为它对此类问题有更经过测试和更全面的实现。
如果您想编写自己的令牌传递实现,可以查看 Spring Security 类SecurityContextHolder
的源代码,它提供了多种在执行线程上传递安全信息的方式。
【讨论】:
但是使用 Spring Security 会带来什么额外的好处,如果 - (1) 我将处理令牌并做出 go/no-go 决定 (2) Spring Security 将创建一个过滤器来处理令牌,无论如何我都可以使用 Spring Around Aspect 来做到这一点。请注意,身份验证已经到位,对于授权,我只需要处理我们的自定义令牌并在它到达 doPost() 之前做出决定。 Spring Security 会给我额外的 Spring 可能无法提供的东西? 我完全同意 Spring Security 可能不会为您描述的用例提供任何额外的好处。我同意您的观点,您可以使用方面来强制执行您描述的那种授权要求。我提到 Spring Security 类只是为了实现它,您可能会发现它在应用层之间传递安全令牌时很有用。以上是关于仅使用 Spring-Security(或)Spring 进行授权的主要内容,如果未能解决你的问题,请参考以下文章
oauth2 spring-security 如果您在请求令牌或代码之前登录
您如何在 spring-security 中注销所有已登录的用户?