如何将 Spring Security 与我现有的 REST Web 服务集成
Posted
技术标签:
【中文标题】如何将 Spring Security 与我现有的 REST Web 服务集成【英文标题】:How can I integrate Spring Security with my already existing REST web services 【发布时间】:2014-09-15 19:41:41 【问题描述】:我已经使用 Spring 和 Hibernate 创建了 REST Web 服务。现在我想在我的 Web 服务中集成 Spring 安全性。如何集成,是否必须在 url 中添加身份验证参数(用户名、密码),或者是否有任何替代方法可以在不更改 url 的情况下集成 Spring Security。提前致谢。
【问题讨论】:
【参考方案1】:根据使用性质、交换信息的敏感性等,有许多方法可以保护 REST 服务。一般设计假设是 REST 调用将是完全无状态的,从而避免使用 HTTP Session 等状态保存存储。
选项 1:基本 HTTP 身份验证
客户端可以使用 HTTP 基本身份验证在每个请求中发送用户名和密码。如果应用程序是用户所在的 Intranet 应用程序,这可能很有用。您必须编写一个组件来检查每个凭据请求并拒绝未经身份验证的请求。
缺点显然是客户端必须为每个请求进行身份验证。如果您还需要执行角色检查,那么这也将与每个请求相关联。
选项 2:每个请求的凭据
您可以在每个请求中包含用户凭据,但这会使您的系统容易受到攻击,因为凭据对于 GET 请求将是清晰可见的。
选项 3:基于令牌的身份验证
客户端将通过 HTTP POST 请求使用用户名和密码对自己进行身份验证,作为响应,他们将收到 REST 会话令牌(用途类似于 HTTP 会话 ID)。然后,客户端将在每个后续请求中将令牌作为 HTTP 请求标头重放。服务器将简单地针对此令牌进行身份验证。
优点是用户只需认证一次。如果您需要执行角色检查,您可以创建一个查找缓存,其中令牌作为键,角色作为值。
您可以在Github 上查看使用选项 3 的示例应用程序。
【讨论】:
以上是关于如何将 Spring Security 与我现有的 REST Web 服务集成的主要内容,如果未能解决你的问题,请参考以下文章
配置 Spring Security 以在认证后返回 JSON 响应
Spring Security 的 CSRF 过滤器的选择性使用
在我现有的 ASP.NET WebForm 项目中集成 YAF.NET
将 spring-session 和 Redis 添加到现有的 Spring Boot Spring Security 配置中