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

将WebSecurity配置适配器与Spring OAuth2和用户信息uri一起使用

水麒
2023-03-14

我创建了一个授权服务,如下所示

@SpringBootApplication
@EnableAuthorizationServer
public class AuthorizationApplication {
   ...
}

使用此application.properties

server.port=9000
security.oauth2.client.client-id=monederobingo
security.oauth2.client.client-secret=monederobingosecret
security.oauth2.client.authorized-grant-types=authorization_code,refresh_token,password,client_credentials
security.oauth2.client.scope=company,client

然后,在一个单独的spring boot项目中,我创建了一个资源服务器。

@SpringBootApplication
@EnableResourceServer
public class App {
   ...
}

使用此application.properties

server.port=9090
spring.application.name=app
security.oauth2.resource.user-info-uri=http://localhost:9000/user

现在,如果我使用授权服务检索到的适当令牌发送这样的localhost:9090/api请求,一切都很好。

但是,在向本地主机9090/登录发送请求时,我不想发送此令牌。

为此,我在我的资源服务器Spring启动应用程序中创建了这个类。

@Configuration
public class SpringConfig extends WebSecurityConfigurerAdapter {
    @Override protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/login")
                .permitAll()
                .antMatchers("/api/**")
                .authenticated();
    }

}

现在我不需要发送任何令牌即可向/login发送请求。

然而,我现在在使用有效令牌向api发送请求时收到以下消息。

{
  "timestamp": 1496027102659,
  "status": 403,
  "error": "Forbidden",
  "message": "Access Denied",
  "path": "/api/v1/points_configuration/314"
}

如何在Spring Security OAuth2中仅为少数URL模式配置安全性?

共有1个答案

单喜
2023-03-14

有关Spring OAuth安全性的更多信息,请遵循以下内容:使用OAuth保护Spring REST Api

为了在Spring boot中实现OAuth安全性,您必须创建授权

    @Configuration
    @EnableAuthorizationServer
    public class AuthorizationApplication extends AuthorizationServerConfigurerAdapter{

    @Autowired
    private UserDetailsService userDetailsService;
    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
                throws Exception {
            endpoints
                    .userDetailsService(userDetailsService)
                    .authenticationManager(this.authenticationManager).tokenStore(tokenStore()).approvalStoreDisabled();
        }

       @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            clients.withClientDetails(mongoClientDetailsService);
            /*inMemory()
                    .withClient(propertyResolver.getProperty(PROP_CLIENTID))
                    .scopes("read", "write")
                    .authorities("ROLE_CLIENT")
                    .authorizedGrantTypes("password", "refresh_token","client_credentials")
                    .secret(propertyResolver.getProperty(PROP_SECRET))
                    .accessTokenValiditySeconds(propertyResolver.getProperty(PROP_TOKEN_VALIDITY_SECONDS, Integer.class, 18000));*/
        }

//Do others stuff
    }

在此服务器配置中,应该提到您要使用OAuth保护的所有Url。它启用了一个Spring Security过滤器,该过滤器使用传入的OAuth2令牌对请求进行身份验证。而扩展类主要用于基本的安全配置,如添加过滤器、允许不安全的url或实现会话策略等。

@Configuration
@EnableResourceServer
public class App extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers("/api/**").and().authorizeRequests()
                .antMatchers("/api/**").authenticated();
}
  //Do others stuff
}
 类似资料:
  • 我目前想实现这样的东西: 但是在中,我们将重点关注authProvider()方法和configure() 随着最近的消息,已被弃用。经过研究,我发现了一件事: 所以我也不得不这么做 这解决了另一个问题。但现在,我发现了这个错误。 这也是我的用户服务 你们介意帮我解决这个问题!谢谢:) 我还想提一下,我还没有在网上找到答案

  • 我使用的Spring安全与oAuth2,但我有一个问题,我没有找到任何答案,在许多项目的例子,你有2次配置(HttpSecurity超文本传输协议)。 例如在https://github.com/spring-projects/spring-security-oauth/blob/master/samples/oauth2/sparklr/src/main/java/org/springframe

  • 我的代码中有多个WebSecurity配置适配器: 当我从ajax请求访问我的站点时,我得到:从源http://localhost:8082访问http://localhost:8080/user/authenticate的XMLHttpRequest已被CORS策略阻止:对飞行前请求的响应未通过权限改造检查:请求的资源上不存在访问控制允许源标头。 我想我的WebSecurity配置适配器中有一些

  • 我试图通过定义从WebSecurityConfigureAdapter扩展而来的配置类,为我的自定义安全配置(LDAP JWT)创建自己的spring启动程序。但是,当我使用此初学者启动应用程序时,我会得到: 我发现由于Spring Security性的这个问题,不再可能这样做了。Spring的WebSecurityConfiguration中有一个断言: 我解决了这个问题,在启动器中添加了以下内

  • 亲爱的社区:我写这篇文章是为了询问我必须如何配置身份验证管理器生成器。 我应该遵循哪个实现 和 此外,我发现如果我注释整个“@Override protected void configure(AuthenticationManagerBuilder auth)”方法,我的应用程序运行良好,但当我注释@Autowired public void globalUserDetails(Autheent