Nacos如何开启鉴权,并通过正确配置账号密码解决开启鉴权后SpringBoot启动失败的问题

Nacos鉴权问题

前言

起初默认状态下,Nacos安装包nacos\nacos\conf\application.properties下鉴权是关闭的,即同一个局域网内都可以通过 http://10.12.xxx.xx:8848/nacos/index.html来访问你的Nacos,尤其是连接公司或学校的WIFI时,只要连接此WIFI的用户都能通过此链接访问你的Nacos,极其不安全。

本文解决的问题:

  • 如何开启鉴权,并进行Nacos的账号密码配置

  • 开启鉴权后,无法连接上Nacos,导致Spring Boot启动失败问题

  • 如果通过postmanapi来测试鉴权

默认情况下:

properties 复制代码
### If turn on auth system:
nacos.core.auth.enabled=false

代码中的application.yaml文件下不需要配置账号密码,如果配置会持续报错

开启鉴权情况下:

所以还是需要开启鉴权,但在开启鉴权后,出现了Spring Boot启动时,无法连接上Nacos报错,导致启动失败

那是因为没有在代码中的application.yaml文件正确配置账号和密码(不应该配置在config下,应该配在nacos全局)

首先需要先在nacos\nacos\conf\application.properties下开启鉴权

properties 复制代码
### If turn on auth system:  启动鉴权
nacos.core.auth.enabled=true
### The two properties is the white list for auth and used by identity the request from other server.
## 默认为空,开启鉴权后需要设置
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
### The default token (Base64 String):   默认为空,开启鉴权后需要设置个base64字符串
nacos.core.auth.plugin.nacos.token.secret.key=SiueIj865Kgh67I5ihhjLKU670mu87Y85ygKSDFUI9khjjh5GjlB8oubkj9kI6GT

然后需要在代码中的application.yaml文件配置账号和密码

需要配置在nacos全局下面,为什么不能只配置在config下?因为在Spring Cloud Alibaba Nacos的配置结构中,Config(配置)和 Discovery(注册)是分开的,如果只给"配置中心"配了账号,忘了给"服务注册"配账号,便会报错

Spring Boot启动进行服务注册(Discovery)时,它发现discovery下面没有账号,就会尝试匿名访问 (或者使用默认值)。

因为Nacos服务端开启了鉴权,匿名访问被拒绝,所以报错

所以建议不要 把账号密码分别写在configdiscovery下面,直接提出来写在最外层,这样两者都会自动生效

账号密码配置

初始启动,管理员账号为nacos,密码会让你先初始化设置,默认为nacos,登入只会便可以在权限控制 的地方增加账号,或者修改密码 ,只有ROLE_ADMIN(初始为nacos的账号)有权限控制的权限

通过Open-API测试鉴权

可以用postman来测试

  • 首先需要使用用户名和密码登陆nacos

    curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'

  • 若用户名和密码正确,返回信息如下:

json 复制代码
{
    "accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyOTE2Nn0.2TogGhhr11_vLEjqKko1HJHUJEmsPuCxkur-CfNojDo",
    "tokenTtl": 18000,
    "globalAdmin": false,
    "username": "test"
}
  • 接下来进行配置信息或服务信息时,应当使用该accessToken鉴权,在url后添加参数accessToken=${accessToken},其中${accessToken}为登录时返回的token信息,例如

    curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyMzkyM30.O-s2yWfDSUZ7Svd3Vs7jy9tsfDNHs1SuebJB4KlNY8Q&dataId=nacos.example.1&group=nacos_group'

参考官方网站:https://nacos.io/docs/v2/guide/user/auth/

相关推荐
盖头盖1 分钟前
【Java反序列化之tabby半自动化挖掘新URLDNS链】
java
黄昏晓x3 分钟前
C++----异常
android·java·c++
yaoxin5211239 分钟前
330. Java Stream API - 处理 Optional 对象:像流一样优雅地使用 Optional
java·windows·python
aningxiaoxixi11 分钟前
Android Audio 广播之 ACTION_AUDIO_BECOMING_NOISY
android·java·python
追随者永远是胜利者19 分钟前
(LeetCode-Hot100)301. 删除无效的括号
java·算法·leetcode·职场和发展·go
追随者永远是胜利者23 分钟前
(LeetCode-Hot100)239. 滑动窗口最大值
java·算法·leetcode·职场和发展·go
今心上23 分钟前
spring中的@Autowired到底是什么
java·后端·spring
无心水26 分钟前
【任务调度:数据库锁 + 线程池实战】4、架构实战:用线程池 + SKIP LOCKED 构建高可用分布式调度引擎
人工智能·分布式·后端·spring·架构
ShiJiuD66688899930 分钟前
Java 异常 File
java·开发语言
lxl130736 分钟前
C++算法(5)位运算
java·c++·算法