Nacos安全性探究

Nacos怎么做安全校验的?

以下使用nacos2.x

如上图所示, 可以直接访问Nacos的接口来获取用户列表。这说明Nacos的接口被爆露,任何情况下都可以访问,因此安全性得不到保障。

Nacos 使用 spring security 作为安全框架。spring security 使用:

在我们的 spring boot项目的 pom文件中引入:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

启动项目后,访问接口时,必需登录才可以。 否则会弹出内置的登录界面:

记住这个界面,这是 spring security 默认的 内置登录界面。

也可以 添加配置:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	// @formatter:off
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
				.authorizeRequests(authorizeRequests ->
					authorizeRequests
						.antMatchers("/css/**", "/index").permitAll()
						.antMatchers("/**").hasRole("USER")
				)
				.formLogin(formLogin ->
					formLogin
       					.loginPage("/login")
						.failureUrl("/login-error")
				);
	}
	// @formatter:on

	@Bean
	public UserDetailsService userDetailsService() {
		UserDetails userDetails = User.withDefaultPasswordEncoder()
				.username("user")
				.password("password")
				.roles("USER")
				.build();
		return new InMemoryUserDetailsManager(userDetails);
	}
}

结论: 只要 我们的 项目中引入了 spring security 的start依赖,那么 接口 都是 安全的,除非 指定哪些接口不受限。

问题:为什么 Nacos 使用了spring security,却像是没有引入 spring security一样,接口可以随意被访问呢?

Nacos的spring security的配置中,如果 

nacos.core.auth.system.type

为空时,会使用 我们配置的  

nacos.security.ignore.urls

属性配置文件中: 

Nacos的 属性配置文件中已经明确写了,当前只支持 nacos 和 ldap两种,所以,Nacos 的 spring security 的配置中,会忽略掉所有的请求。这就说明,spring security 不会对任何请求做安全校验了

Nacos在启动的时候,会注册一个 自定义的 filter 来进行登录校验。

 

 Nacos提供的 filter 逻辑中,判断了 是否开启权限校验,如果没开启,则不校验。 而权限校验开关默认是关闭的。

因此,默认情况下不会对接口做安全校验。 这也就是 为什么 使用了spring security,却像没有使用spring security似的 没对接口做安全校验的原因。

对于有些接口,如/login等,接口逻辑中 增加了 登录校验功能,因此,即使 spring security 将请求放过,接口内部逻辑也能够完成安全校验逻辑。这就是为什么有些接口必须登录,有些接口可以随意访问。

总结:

1. 使用 spring security 可以做安全校验

2. 使用spring security 可以对指定接口进行直接放行

3. 可能spring security的安全校验不符合要求,就自己定义了安全校验功能,将spring security配置成对所有接口放行。那么 此时 安全校验功能 就需要 自己来完成。

4. 有些接口 完全依赖 安全框架的权限校验逻辑,自己不做校验。

5. 也可以在接口中 增加校验逻辑。即使 请求到了接口,那么 接口内部也可以做一些权限校验,而不用依赖安全框架

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值