nacos-server鉴权开启及 客户端连接
这里主要介绍 nacos2.2.1 及以后的版本,有以下几点
- 写这篇文章时,最新版本为2.3.2
- Nacos从2.1.0版本开始,支持通过SPI的方式注入鉴权相关插件,并在application.properties配置文件中选择某一种插件实现作为实际鉴权服务
- 2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会给一个登录页,默认用户名和密码都是nacos。
- 2.2.3版本后,Nacos可支持关闭开源控制台,并引导到用户自定义的Nacos控制台,具体看官方; 查看官方
1. nacos-server 的配置文件
关键配置信息
如果开启持久化,需要脚本的,在config文件夹下,mysql-schema.sql 这个脚本
// 默认路径一般不修改
server.servlet.contextPath=/nacos
// 默认无需修改
server.error.include-message=ALWAYS
// 端口,自行修改
server.port=8848
// *************** 配置信息***************#
// 持久化配置信息
spring.datasource.platform=mysql
// 指定DB信息
db.num=1
// 地址
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123!@#
// hikariCP默认配置,可自行修改
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
// Metrics for elastic search
management.metrics.export.elastic.enabled=false
// Metrics for influx
management.metrics.export.influx.enabled=false
// *************** 日志配置 ***************#
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
// The ignore urls of auth
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
// 鉴权方法 默认nacos 也支持 ldap,后面可自行配置
nacos.core.auth.system.type=nacos
// 开启鉴权, 这个默认是关闭,2.2.3以后无需登录即可登录管理界面,以前还是需要使用 用户名和密码登录(默认都是nacos)
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
// 2.2.1以前默认值:k->serverIdentity,v->security;2.2.1 以后无默认,2.2.1 如果不配置,无法启动,但是 2.2.3 以后 不配置也可启动
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
// 2.1.0 版本前 字段及其默认值 nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 ;之后 无默认值,且必须使用 原字符串长度 大于32位 经过Base64加密后的字符串,如上面的默认值 加密后为:VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=;这里就使用这个默认值,自行按照此规定进行配置,否则 开启鉴权后 无法启动
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
#*************** Istio Related Configurations ***************#
// If turn on the MCP server:
nacos.istio.mcp.server.enabled=false
secret.key | 版本 | 默认值 | 规则 |
---|---|---|---|
nacos.core.auth.default.token.secret.key | 2.1.0 之前 | SecretKey012345678901234567890123456789012345678901234567890 | 大于 32位长度的字符 |
nacos.core.auth.plugin.nacos.token.secret.key | 2.1.0 之后 | 无 | 大于32位长度的字符 使用 Base64机密后的字符 |
==这是白名单的设置,用于 open-api 访问时使用,使用方式:请求时放到 header 中, 这样就可以不用使用 token 了 ==
nacos.core.auth.server.identity.key/value | 版本 | 默认值 | 规则 |
---|---|---|---|
nacos.core.auth.server.identity.key | 2.2.1 之前 | serverIdentity | 必须配置,否则无法启动 可以配置任意值 |
nacos.core.auth.server.identity.key | 2.2.1 之后 | 无 | 可不配置 如果开启了鉴权,必须配置,任意值 |
nacos.core.auth.server.identity.value | 2.2.1 之前 | security | 必须配置,否则无法启动, 可以配置任意值 |
nacos.core.auth.server.identity.value | 2.2.1 之后 | 无 | 可不配置 如果开启了鉴权,必须配置,任意值 |
postman 测试时 如下图 (上面自己配置的值)
auth 鉴权 | 版本 | 默认值 | 控制台,默认用户名密码都是nacos | 值=true | 值=false |
---|---|---|---|---|---|
nacos.core.auth.enabled | 2.2.2 之前 | false | 127.0.0.1:8848/nacos | 必须登录 | 必须登录 |
nacos.core.auth.enabled | 2.2.2 之后 | false | 127.0.0.1:8848/nacos | 必须登录 | 无需登录 |
是否可关闭控制台 | 版本 | 是否 |
---|---|---|
不支持 | 2.3.0 之前 | 否 |
nacos.console.ui.enabled | 2.3.0 之后 | true-开启 false- 关闭 |
2. server 启动及登录页面配置
-
登录界面
-
添加用户
-
添加角色
-
添加权限
-
添加命名空间
3. spring cloud 项目中 使用nacos 时的配置
spring:
cloud:
nacos:
discovery:
enabled: true
server-addr: 127.0.0.1:8848
namespace: c3bc4329-2c06-42cf-8b76-00c77205280f # 如果不填,默认是 public
group: eid-group # 如果不填,默认是 default_group
username: m1 # 控制台中添加 的用户名称和密码,记得给对应的 namespace 权限,否则无法连接
password: miller
注意上面的namespace 是这里
open-api 的使用
看官网地址:open-api指南
注意 分 2.x (v2) 和 1.x (v1)
- 2.x 兼容 1.x 的api
- 但是注意部分 参数名称不一样,如 2.x中 命名空间Id :namespaceId,1.x中:tenant
开启鉴权后,访问权限有2种,
-
一种是 使用 配置文件中的白名单
nacos.core.auth.server.identity.key
和nacos.core.auth.server.identity.value
;使用方法,上面截图中已经给了 -
使用accessToken,获取accessToken 的方法
-
accessToken 使用方法,举例:获取配置信息,具体接口看官网