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/

相关推荐
heartbeat..8 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
8 小时前
java关于内部类
java·开发语言
好好沉淀8 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin8 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder9 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
吨~吨~吨~9 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟9 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端
短剑重铸之日9 小时前
《设计模式》第二篇:单例模式
java·单例模式·设计模式·懒汉式·恶汉式
码农水水9 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
summer_du9 小时前
IDEA插件下载缓慢,如何解决?
java·ide·intellij-idea