【发布时间】:2015-12-09 11:38:25
【问题描述】:
我知道保护 REST API 是一个广受评论的话题,但我无法创建一个符合我的标准的小型原型(我需要确认这些标准是现实的)。如何保护资源以及如何使用 Spring 安全性有很多选择,我需要澄清我的需求是否现实。
我的要求
- 基于令牌的身份验证器 - 用户将提供其凭据并获得唯一且有时间限制的访问令牌。我想在自己的实现中管理令牌创建、检查有效性、过期。
- 一些 REST 资源将是公开的 - 根本不需要进行身份验证,
- 某些资源只能由具有管理员权限的用户访问,
- 其他资源在所有用户授权后都可以访问。
- 我不想使用基本身份验证
- Java 代码配置(不是 XML)
当前状态
我的 REST API 运行良好,但现在我需要保护它。当我在寻找解决方案时,我创建了一个javax.servlet.Filter 过滤器:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String accessToken = request.getHeader(AUTHORIZATION_TOKEN);
Account account = accountDao.find(accessToken);
if (account == null) {
throw new UnauthorizedException();
}
chain.doFilter(req, res);
}
但是 javax.servlet.filters 的这个解决方案不能按我的需要工作,因为通过 @ControllerAdvice 和 Spring servlet dispatcher 处理异常存在问题。
我需要什么
我想知道这些标准是否现实并获得任何帮助,如何开始使用 Spring Security 保护 REST API。我阅读了许多教程(例如 Spring Data REST + Spring Security),但都在非常基本的配置中工作 - 他们的凭据存储在内存中配置中的用户,我需要使用 DBMS 并创建自己的身份验证器。
请给我一些建议如何开始。
【问题讨论】:
标签: java spring rest spring-security