Spring Data REST 中的身份验证和授权
Posted
技术标签:
【中文标题】Spring Data REST 中的身份验证和授权【英文标题】:Authentication and authorization in Spring Data REST 【发布时间】:2013-09-30 02:45:03 【问题描述】:我正在实现一个基于Spring Data REST 的应用程序,我想知道是否有一种优雅的方式来使用这个框架或相关框架来实现身份验证和授权规则。
对 REST 服务器的所有 HTTP 请求都必须带有身份验证标头,我需要检查它们并根据 HTTP 方法以及经过身份验证的用户与所请求资源的关联来决定是否授权。例如(应用程序是电子学习系统的 REST 服务器),教师只能访问自己的课程部分,学生只能访问他们订阅的课程部分等。
我想知道在 Spring Data REST 中是否有实现授权的默认方式。如果答案是否定的,您能对我的问题提出建议吗?我正在考虑:
Servlet 过滤器 Spring 安全性 Spring Data REST 处理程序(如何访问 HTTP 标头?)【问题讨论】:
Spring 安全性相当方便且相对简单地用于身份验证。你可能想看看这个:mkyong.com/spring-security/spring-security-form-login-example 您可以使用servlet过滤器来实现细粒度的授权。这是一个例子:webfarmr.eu/2011/05/… 一个问题是您如何让 CrudRepository 响应 SecurityContext(例如,用于检索与“当前用户”相关/受限的数据)? 使用 Servlet Filters 等解决方案的问题是反序列化的实体被封装在 Spring Data Rest 代码中,所以我无法从过滤器中访问它。我需要将实体与身份验证标头中存在的用户数据进行比较。我正在考虑分叉 Spring Data Rest 代码来创建一个授权层,提供一个 AuthorizationLister 接口,在我的应用程序中我可以实现一个方法:boolean authorize(HttpRequest request, Object persistentEntity) 罗德里戈,你实现了吗?编写代码有多容易,每次更新 Spring Data Rest 版本时是否需要进行更改? 【参考方案1】:对您来说最好的选择是 Spring Security。 这将帮助您以更简单的方式获得授权。
Spring Security 将要求您实现查看请求标头并以编程方式执行登录操作。
在此处参考已接受的答案。我也遵循了相同的做法,并在我的休息服务(使用 RestEasy 构建)之前实施了安全层
RESTful Authentication via Spring
还有另一种方法.. 参考 http://www.baeldung.com/spring-security-authentication-provider
在这两种情况下,您都可以通过在 Spring Security 中声明无状态身份验证来禁用会话创建,这将帮助您在对无状态 REST 服务进行大量点击时显着提高性能。..
【讨论】:
-1。问题是关于“Spring Data REST”和实体级授权,所以你提供的通用解决方案在这里不适用。以上是关于Spring Data REST 中的身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 grails spring-security-rest 插件中的自定义身份验证异常?
Spring MVC REST + Spring Security + 基本身份验证
使用 Spring 和 Spring Security 进行 REST 身份验证