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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值