我创建了一个授权服务,如下所示
@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模式配置安全性?
有关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