alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.29k stars 12.84k forks source link

Nacosv2.2.0在开启权限校验之后,spring应用只有nacos这个用户能登录上,其他用户登录不了 #11922

Closed shoupt closed 6 months ago

shoupt commented 7 months ago

我的spring应用配置是这样的:

spring: application: name: ${spt.app.service.serve-code}-${spt.app.service.serve-version} profiles: active: sit cloud: nacos: discovery:

配置服务注册中心地址

    server-addr: *.*.*.*:8848
    username: nacos
    password: ****
    group: SIT_GROUP
    namespace: *******************************************
  config:
    # 配置中心地址
    server-addr: *.*.*.*:8848
    file-extension: yaml
    username: nacos
    password: ****
    context-path: /nacos
    group: SIT_GROUP
    refresh-enabled: true
    timeout: 300000
    namespace: *******************************************

config: import:

nacos:2.2.0 springBoot:2.7.9 springCloud:2021.0.5 springCloudAlibaba:2021.0.5.0

当我在nacos开启了权限校验之后,同时我在nacos中另外创建的一个用户sit_r, 分配的权限是:SIT_READ,PUBLIC_READ 顾名思义就是对 SIT_GROUP和public这两个命名空间的读权限 image image

然后问题就出现了,让我疑惑的是,在不修改其他配置项的情况下,只有nacos的用户名跟密码能够正常访问,而 discovery 和 config 换了 sit_r 这个用户的用户名跟密码就会报错权限校验未通过:NacosException: authorization failed!

shoupt commented 7 months ago

同样的这个配置换成sit_r那个用户的用户名和密码就启动不了,NacosException: authorization failed!

KomachiSion commented 7 months ago

给予读写权限试试, 我记得SC是需要写权限的,会进行服务的注册

shoupt commented 7 months ago

给予读写权限试试, 我记得SC是需要写权限的,会进行服务的注册

将sit_r这个用户给于了SIT这个命名空间的读写权限之后,应用确实可以启动起来了,不过我有个疑问哈,老师,我想请问一下,就是如果我创建的这个用户,我只希望它能够进行服务注册到A命名空间,同时只能读取A空间下的配置,而不能对A空间下的配置进行新增、克隆、删除、修改,请问我该怎么进行配置呢

KomachiSion commented 7 months ago
  1. 分为两个用户,一个只有A命名空间的读权限,配置给config客户端,一个有读写权限,配置给naming客户端。
  2. 开发自己的鉴权插件,实现注册中心和配置中心接口的权限分离。
shoupt commented 7 months ago

请问第二种方式有哪个nacos版本是自带这个功能的吗

KomachiSion commented 6 months ago

2.1版本之后都可以开发自定义的鉴权插件。

shoupt commented 6 months ago

https://nacos.io/zh-cn/docs/plugin/auth-plugin/

看到了,谢谢