我正在为Spring Boot应用程序中的几个内部端点设置基本身份验证。在进行基本身份验证检查之前,我有一个用例来进行IP白名单验证。使用WebSecurityConfigurerAdapter配置方法,我能够实现此目的,但是在进行IP白名单授权之前进行基本身份验证的情况下,顺序相反。
有没有办法让IP白名单优先于基本身份验证?
使用以下代码进行网络安全
return new WebSecurityConfigurerAdapter() {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.anyRequest()
.access("(hasIpAddress('xx.xx.xx.xx') and isAuthenticated()")
.and()
.httpBasic();
}
}
答案 0 :(得分:0)
您必须在配置中以所需的顺序声明。
@Component
public class IPWhiteLister implements AuthenticationProvider {
Set<String> whitelist = new HashSet<String>();
public CustomIpAuthenticationProvider() {
whitelist.add("10.1.1.1");
whitelist.add("172.1.1.1");
}
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
WebAuthenticationDetails details = (WebAuthenticationDetails) auth.getDetails();
String userIp = details.getRemoteAddress();
if(! whitelist.contains(userIp)){
throw new BadCredentialsException("Invalid IP Address");
}
return auth;
}
并按照https://www.baeldung.com/spring-security-multiple-auth-providers中的步骤使用多个身份验证提供程序。您还必须重写另一个配置方法来构建AuthenticationManagerBuilder。 您可以通过authenticationProvider方法添加多个Authentication Provider。这几乎没有欺骗性,因为签名没有说明它将允许您添加多个身份验证提供程序。
public class ApplicationSecurity extends WebSecurityConfigurerAdapter
{
Logger logger = LoggerFactory.getLogger(ApplicationSecurity.class);
@Autowired
private IPWhiteListFilter ipWhiteListFilter;
@Override
protected void configure(AuthenticationManagerBuilder auth){
auth.authenticationProvider(ipWhiteListFilter);
// FOLLOWING is just an example
auth.authenticationProvider(userNamePasswordAuthenticator)
}
...
代替代码中的以下行
.access("(hasIpAddress('xx.xx.xx.xx') and isAuthenticated()")
只需使用
.authenticated()