Nacos是阿里巴巴开源的,用于服务发现和配置管理的中间件。配置中心已经使用Apollo,所以我们只需要使用服务发现能力即可。
问题
学习研究Nacos过程中,发现如下几点:
- Nacos的支持插件机制,包括权限模块
- Nacos管理后台,支持使用LDAP的方式对接已有权限系统
- Spring-cloud-nacos客户端需要配置用户名和密码,才能正常注册
第2点是为了用户方便使用公司内部账号访问Nacos。但这结合第3点使用就出现了冲突。假设一个部门多个人同时进行开发,这样某个人的用户名和密码就会暴露给了其他开发人员。
1 | spring.cloud.nacos.discovery.namespace=provider |
Nacos本地身份验证和Ldap身份验证的区别
翻了一下源码,这两个方式,主要区别在于,ldap方式会先用Nacos本地身份验证,如果验证失败,才会使用ldap方式验证。
manager类涉及到身份认证,区别在上述已经说明。authPluginService涉及权限验证,两种方式代码完全是一样的,不存在差别。
而且spring-cloud-nacos客户端,和管理后台用户登录,权限验证的代码完全一样。
解决方案,方案1
采用对称加密算法,对用户密码进行加密,这样就能避免把自己密码暴露给其他开发人员。
1 | spring.cloud.nacos.discovery.namespace=provider |
这就需要修改Nacos部分源码,在进行服务端验证权限之前进行拦截,对加密的密码进行解密。
客户端 -》将加密的密码解密 -》服务端验证
验证了一个想法,方案2
Nacos 服务端开启了ldap登录,用户登录成功后,就会在Nacos本地存储用户名和一个默认密码。用户名以”LDAP_”作为前缀。
管理员在后台可以修改用户密码
之后客户端使用Nacos本地保存的“LDAP_”前缀的用户名和密码,就可以正常注册服务了。
1 | spring.cloud.nacos.discovery.namespace=provider |
总结
1.所以一开始提出的问题,Nacos本身是有解决的。