nacos开启鉴权

一:开启鉴权原因

部署好Nacos服务端后,默认没有开启鉴权,直接不用登录就能访问控制台,也能直接注册服务,存在很大的安全风险。

之前也爆过Nacos权限认证绕过漏洞(CVE-2021-29441):该漏洞发生在nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。利用这个未授权漏洞,攻击者可以获取到用户名密码等敏感信息,还可以进行任意操作,包括创建新用户并进行登录后操作。

Nacos官方关于安全方面的一些声明:

  • Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。
  • Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。
  • 如果运行在不可信的网络环境或者有强鉴权诉求,请参考官方简单实现进行自定义插件开发。

接下来我们使用Nacos提供的鉴权实现,对服务端进行一定的安全保护,除此之外实际应用时,Nacos应当部署在内网,实在需要暴露在公网时,应当使用插件实现强鉴权体系。

二:开启鉴权

1:服务端

服务端nacos /nacos/distribution/conf下面的application.properties文件
在这里插入图片描述
首先配置nacos.core.auth.enabledtrue标识开启鉴权:

### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos

### 开启鉴权
nacos.core.auth.enabled=true

然后需要配置一个自定义密钥(nacos中配置了springboot项目中不用配),用于生成JWT令牌:

### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=yyy012345678901234567890123456789012345678901234567890123456789=

自定义秘钥注意事项:

  • Nacos 2.2.0.1之后的版本,配置默认为空,需要自行添加一个,否则无法启动服务端。
  • 推荐将密钥配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。
  • 文档中提供的密钥为公开密钥,在实际部署时请更换为其他密钥内容,防止密钥泄漏导致安全风险。
  • 密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误。

开启鉴权以后,在集群模式下各节点之间进行通信,需要配置白名单,通过消息头传递规定的标识,例如,在早前的版本中,携带了user-agent: nacos-server消息头的请求,会被直接放行,但是这种方式爆出了安全漏洞。

所以Nacos默认关闭了该配置:

### 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false

这时,就需要我们自定义一个认证KeyVaule用于集群通信,示例如下:

### 配置自定义身份识别的key(不可为空即用户名)和value(不可为空即密码)
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos

配置完成后,重启服务端,访问控制台需要登录,默认的用户名/密码为nacos/nacos,可以修改密码为自定义的密码(例如LJ)。

2:客户端

服务端开启鉴权后,客户端进行注册时,会报错:

Caused by: com.alibaba.nacos.api.exception.NacosException: user not found!
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:359) ~[nacos-client-2.2.1.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doSubscribe(NamingGrpcClientProxy.java:311) ~[nacos-client-2.2.1.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.subscribe(NamingGrpcClientProxy.java:296) ~[nacos-client-2.2.1.jar:na]

只需在springboot application.properties文件中添加用户名/密码即可:

spring:
  application:
    name: richfit
  cloud:
    nacos:
      discovery:
        username: nacos
        password: LJ

3:令牌缓存

无论是客户端SDK还是OpenAPI,都是在调用login接口获取accessToken之后,携带accessToken访问服务端,服务端解析Token进行鉴权。因此解析的动作比较耗时,如果想要提升接口的性能,可以考虑开启缓存Token的功能,用字符串比较代替Token解析。

服务端自2.2.1版本后,默认鉴权插件模块支持令牌缓存功能,默认关闭,通过以下配置开启:

# 开启令牌缓存
nacos.core.auth.plugin.nacos.token.cache.enable=true
# 令牌过期时间
nacos.core.auth.plugin.nacos.token.expire.seconds=18000

在开启令牌缓存功能之后,服务端对每一个携带用户名密码访问login接口的请求,会先检查缓存中是否存在该用户名对应的token。若不存在,生成新的Token,插入缓存再返回,若存在,返回该token

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Nacos是一个开源的动态服务发现、配置和服务管理平台,它提供了一个简单易用的Web UI和RESTful API,可以帮助用户轻松地实现微服务架构。在Nacos开启鉴权可以提高系统的安全性,确保只有授权用户可以访问敏感资源。以下是Docker Nacos开启鉴权的具体步骤: 1. 在Nacos的配置文件(nacos/conf/application.properties)中配置以下参数: ``` nacos.security.enable=true nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/**,/v1/auth/**,/v1/console/**,/actuator/**,/nacos/**,/plugins/**,/app/**,/health/**,/app/*/*/health/**,/proxy/*/*/metrics,/proxy/*/*/prometheus nacos.security.auth.enabled=true nacos.security.auth.configs=nacos.plugin.security.auth.DefaultAuthConfig ``` 其中,nacos.security.enable=true表示开启Nacos的安全模式;nacos.security.ignore.urls是忽略认证的URL列表,包括默认URL和用户自定义URL;nacos.security.auth.enabled=true表示开启Nacos的权限认证功能;nacos.security.auth.configs=nacos.plugin.security.auth.DefaultAuthConfig表示使用默认的权限认证配置。 2. 在Nacos的插件目录(nacos/plugins)下创建一个auth目录,并在该目录下创建一个文件名为nacos-auth.jar的jar包。该jar包包含了自定义的权限认证实现类。 3. 启动Nacos服务,此时Nacos就会自动加载插件目录下的jar包,并使用自定义的权限认证实现类来进行认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值