如何使用Spring Boot和Spring Security保护REST API?

Artegon:

我知道保护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无法按我的需要工作,因为通过@ControllerAdviceSpring 处理异常存在问题servlet dispatcher

我需要的

我想知道这些标准是否切合实际并获得任何帮助,以及如何开始使用Spring Security保护REST API。我阅读了许多教程(例如Spring Data REST + Spring Security),但是所有教程都在非常基本的配置中工作-带有凭据的用户存储在配置中的内存中,我需要使用DBMS并创建自己的身份验证器。

请给我一些想法,如何开始。

Oleksandr Loushkin:

基于令牌的身份验证-用户将提供其凭据,并获得唯一且受时间限制的访问令牌。我想在自己的实现中管理令牌的创建,检查有效性和到期时间。

实际上,将过滤器用于令牌验证-这种情况下的最佳方法

最终,您可以通过Spring Data创建CRUD,以管理Token的属性(例如过期)等。

这是我的令牌过滤器:http : //pastebin.com/13WWpLq2

和令牌服务实施

http://pastebin.com/dUYM555E

某些REST资源将是公共的-完全不需要身份验证

没问题,您可以通过Spring安全配置来管理资源,如下所示: .antMatchers("/rest/blabla/**").permitAll()

某些资源仅对具有管理员权限的用户可用,

看一下@Secured注解类。例:

@Controller
@RequestMapping(value = "/adminservice")
@Secured("ROLE_ADMIN")
public class AdminServiceController {

授权所有用户后,即可访问其他资源。

返回Spring Security configure,您可以像这样配置URL:

    http
            .authorizeRequests()
            .antMatchers("/openforall/**").permitAll()
            .antMatchers("/alsoopen/**").permitAll()
            .anyRequest().authenticated()

我不想使用基本身份验证

是的,通过令牌过滤器,您的用户将通过身份验证。

Java代码配置(非XML)

回到上面的话,看@EnableWebSecurity您的课程将是:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {}

您必须重写configure方法。下面的代码仅作为示例,介绍如何配置匹配器。它来自另一个项目。

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/assets/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
                .usernameParameter("j_username")
                .passwordParameter("j_password")
                .loginPage("/login")
                .defaultSuccessUrl("/", true)
                .successHandler(customAuthenticationSuccessHandler)
                .permitAll()
            .and()
                .logout()
                .logoutUrl("/logout")
                .invalidateHttpSession(true)
                .logoutSuccessUrl("/")
                .deleteCookies("JSESSIONID")
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .and()
                .csrf();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Security保护REST API

使用Spring Security保护rest-api后,Spring Boot JS App无法正常工作

使用Spring Boot和JWT保护REST Api

当我有2种类型的用户时如何使用Spring Security保护Rest API

使用Spring-security @PreAuthorize批注和OAuth2保护REST API

通过Spring Security保护REST

使用 java 和 spring boot 的 REST api

使用Spring Security保护REST端点

SpringBoot 2.0:使用 Spring Security Oauth2 保护 REST API

Spring Security和REST API?

Spring Security中可以有多个配置来保护Web应用程序和Rest API吗?

如何使用Azure AD B2C保护Spring Boot REST API?

Spring Security REST API

如何使用Spring Security和OAuth2保护Apache Camel Rest端点

在Spring Boot中使用令牌保护API

如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面

如何使用Spring Security Oauth来保护Struts2 Rest服务

从Android调用受Spring Security保护的REST Web服务

使用LDAP认证的Spring Boot REST API

使用Rest API 404的Spring Boot

Spring Boot 如何使用不同的身份验证方案拥有 Thymeleaf 网页和 REST API

无法在 Spring Boot 中通过 RestTemplate 和 Eureka 使用 REST API

如何在没有Spring安全性的情况下使用api密钥保护rest api

如何使用Spring Boot和Spring Security OpenId配置Spring 4.0

Spring Kafka的Spring Boot Rest API

为Rest Api实施Spring Security

Spring Security-REST API的授权

带有REST API的Spring Security

如何使用使用 SPRING BOOT DATA REST 创建的 rest API 插入