当前位置: 首页 > 知识库问答 >
问题:

具有基本身份验证和OAuth订单问题的Spring Boot安全性

傅丁雷
2023-03-14

我试图实现一个简单的Spring启动项目。我有几个Restendpoint,我必须以不同的方式保护它们。一个必须由基本身份验证保护,另一个必须由OAuth保护,另一个必须由自定义安全实现保护。

REST-endpoint:

  • /基本/授权

教程中,我知道我必须设置安全适配器的顺序。我的第一个意图是在十个步骤中设置顺序(例如@Order(10)@Order(20)),以防我需要在两者之间添加其他安全过滤器。通过这样做,我调查了以下行为:

  • 如果我添加了基本的身份验证过滤器和OAuth过滤器,只有OAuth过滤器可以工作。
  • 如果我添加基本的认证过滤器与@订单(1)@订单(2)和一个OAuth过滤器与@订单(4)两个过滤器的工作。
  • 如果我添加一个过滤器到@订单(3)我收到一个错误,说,订单3已经在使用,不能配置两次。

所以有一个默认的Spring安全适配器(或任何东西),它具有默认的顺序3。我想我通过添加@EnableWebSecurity来禁用每个默认的Spring安全行为。在我没有通过谷歌找到答案后,我的问题是:

  • 我做的对吗
  • spring订购3的安全适配器是什么
  • 默认安全适配器是否阻止我的基本身份验证实现

Web安全配置:

   @Configuration
   @EnableWebSecurity
   public class WebSecurityConfig {

    @Order(10)
    @Configuration
    public class BasicAuthConfig extends WebSecurityConfigurerAdapter {
        @Value("${security.user.password}")
        private String password;
        @Value("${security.user.name}")
        private String username;

        private static final String ROLE_ADMIN = "ADMIN";

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication().withUser(username).password(password).roles(ROLE_ADMIN);
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            http.requestMatchers().antMatchers("/basic/**", "/") //
                    .and().authorizeRequests().anyRequest().authenticated() //
                    .and().httpBasic();
        }
    }

    @Order(20)
    @Configuration
    @EnableResourceServer
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    protected static class Oauth2ServerConfig extends ResourceServerConfigurerAdapter {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            System.out.println("Filter called");
            // @formatter:off
            http.csrf().disable();
            http.authorizeRequests().antMatchers("/application/**").authenticated()
                    // .antMatchers(GET, "/application/secure").authenticated()
                    .anyRequest().authenticated(); 
            // @formatter:on
        }

     // offline token validator

    }

共有1个答案

谢俊力
2023-03-14

这是一个老生常谈的问题,但如果有人仍然想知道问题是什么,以下是我的观察结果:

  • @EnableResourceServer导入ResourceServerConfiguration,其顺序为3
  • 例如,有一些方法允许您在order 3资源服务器配置器之前添加2个以上的筛选器
    • 通过给他们一些负序值(虽然我不认为负值会有什么特殊,但我们需要考虑其他隐式web安全配置程序——例如,默认启用的顺序为0的配置程序。然而,这意味着随着新功能的引入,不同版本的框架中的过滤器之间可能会发生冲突);
    • 通过将它们添加为资源配置器(如果用户未配置任何内容,ResourceServerConfiguration类不会添加任何请求匹配器,但会强制回退到anyRequest().authenticated()

 类似资料:
  • 我很确定这是在一个不同的线程中处理的,但是我遇到的那些线程并不清楚。 我只是想找到一些关于如何在Spring Boot中使用安全的RESTful API的好例子或文档;使用API密钥或基本身份验证。

  • 我想使用Spring Cloud实现OAuth2的令牌刷新。 我可以使用以下有效负载通过向发送请求来创建令牌: 但对于刷新令牌,则使用相同的路径。我还需要将用户名和密码发送到标题中,但我没有它们。我可以使用以下负载使用刷新令牌创建一个新令牌: Github代码

  • 问题内容: Jsoup中是否可以通过基本访问身份验证从网站加载文档? 问题答案: 使用HTTP基本访问身份验证时,您需要发送标头以及一个值。 例如(在Apache Commons Codec Base64的 帮助下): (为了简便起见,省略了字符编码的明确说明,因为登录名和密码通常很简单;此外,Base64总是生成字节)

  • 在Spring中使用基本身份验证时,我遇到了与HTTP响应标头“Access-Control-Allow-Origin”相关的问题。当我手动进行身份验证时,就像下面的代码一样(我使用的是REST): 一切正常,我收到以下HTTP响应: 如您所见,响应中出现了“Access-Control-Allow-Origin”。这里一切都好。我可以在ajax调用中捕捉到401错误。 但是,当身份验证自动执行时

  • 问题内容: 我必须 使用 HTTP Basic身份验证从http服务器下载和解析XML文件。现在,我这样做: 但是以这种方式,我无法从具有http身份验证的服务器获取xml(或者我只是根本不知道该文档)文档。 如果您能向我展示实现我的目标的最好,最简单的方法,我将不胜感激。 问题答案: 您可以使用。例如: 这将设置默认值,并将在 所有 请求中使用。显然,当您不需要所有请求的凭据或多个不同的凭据(可

  • 几天没有任何进展,我需要你的帮助。 使用GWT,我试图与REST服务器通信,服务器位于不同的URL上(需要CORS)<我的配置:服务器spring boot 1.3.3 客户端-GWT 1.7-restygwt 2.0.3 当我在Spring中禁用安全性时,我可以在我的GWT客户端中获取数据。 但是当我启用它时,我总是收到401个请求。REST URL请求直接在Web浏览器中工作(带有其身份验证对