我有两个应用程序(war),一个用作Resource Server
,另一个是我在Auth Server
运行在两个不同的服务器上。我使用的是client_credentials
grant_type。我需要白名单我的资源服务器的IP,以便其他人无法使用post-man或浏览器或任何其他人直接访问“/ oauth / check_token”端点用户代理。以下是auth服务器的代码片段:
@EnableAuthorizationServer
@Configuration
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isFullyAuthenticated()")
.allowFormAuthenticationForClients().realm(REALM + "/client");
}
...
some other configuration code related to ClientDetails and tokenStore.
...
}
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.anonymous().disable()
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/oauth/check_token").access("isFullyAuthenticated() and hasIpAddress('0.0.0.0/0')").accessDecisionManager(accessDecisionManager)
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint)
.and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
}
}
我找到了一种在春天将IP列入白名单的方法:
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.anyRequest().access("hasIpAddress('0.0.0.0/0')");
}
但这对我的情况没有帮助,因为它只检查fullyAuthenticated()
。我希望在访问“/ oauth / check_token”之前对所有资源服务器进行身份验证和授权
被修改
我提到了类似的问题:How to find users' IPs in Spring Security?但它没有帮助我,因为在那个问题中他们试图授权资源服务器Api,但在我的情况下我想授权spring-security默认端点即; /oauth/check_token
在进一步调试时,我发现如果删除.antMatchers(HttpMethod.GET,"/oauth/check_token").access("hasIpAddress('0.0.0.0/0')").accessDecisionManager(accessDecisionManager)
我仍然可以使用/oauth/check_token
端点。
然后我尝试在AuthorizationServerSecurityConfigurer.checkTokenAccess(“permittAll()”)中将fullyAuthenticated更改为permitAll();它开始允许每个人访问check_token端点。这意味着它甚至没有从.antMatchers(HttpMethod.GET,"/oauth/check_token")
现在我很困惑如何配置hasIpAddress()并且我们需要明确提到antMatcher(“/ oauth / check_token”),或者它是默认提供的。
答案 0 :(得分:0)
您可以像这样对其进行建模,从而保持这两个要求 - IP白名单和所有请求都经过身份验证。如果不需要,您可以删除localhost访问规则:
{{1}}