nacos新版踩坑

打印 上一主题 下一主题

主题 644|帖子 644|积分 1936

背景

官方软件更新的背景

2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页,需要登录乐成才气操作;这导致很多用户被误导认为Nacos默认是存在鉴权的。在社区安全工程师的发起下,Nacos自2.2.2版本开始,在未开启鉴权时,默认控制台将不需要登录即可访问,同时在控制台中给予提示,提醒用户当前集群未开启鉴权。
官方参考链接:https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
我的利用背景

之前用的旧版本nacos,很多服务的nacos client端都没有开启鉴权。但是为了保证运维开发职员不能随意改设置,管理页面上是有认证的。(nacos2.2.2版本前刚好都满足)
辩论

辩论1:nacos升级到2.2.2之后,如果没开启鉴权,管理页面没有登录功能了,访问进去可以直接修改设置。
辩论2:我们有很多服务,部分陈旧服务乃至没有源码,把鉴权加上不太可行。
辩论3:尝试用nginx代理访问nacos,在nginx上用auth_basic设置账号密码。发现即便是账号密码输入正确也不行,频繁报401的错。排查后发现,auth_basic和nacos都需要用Header中Authorization参数,发生了辩论。
解决方案

在nginx利用lua剖析账号密码,利用cookie记载是否认证乐成
步调1:nginx中添加html登录页面login.html (输入账号密码,跳转的lua剖析页面) —>
步调2:lua剖析页面,如果剖析乐成账号密码,就写一个cookie,并跳转到nacos页面 -->
步调3:nacos页面判断是否有cookie,如果有cookie就访问nacos页面,如果没有对应的cookie就跳转到登录页面
nginx设置参考
  1. events {
  2.     worker_connections  1024;
  3. }
  4. http {
  5.     server {
  6.         listen 80;
  7.         # 登录页面
  8.         location = /login.html {
  9.             default_type text/html;
  10.             content_by_lua_block {
  11.                 ngx.say([[
  12.                 <!DOCTYPE html>
  13.                 <html lang="en">
  14.                 <head>
  15.                     <meta charset="UTF-8">
  16.                     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  17.                     <title>Nacos Login</title>
  18.                 </head>
  19.                 <body>
  20.                     <h2>Nacos Login</h2>
  21.                     <form method="post" action="/login">
  22.                         <label for="username">Username:</label>
  23.                         <input type="text" id="username" name="username" required><br><br>
  24.                         <label for="password">Password:</label>
  25.                         <input type="password" id="password" name="password" required><br><br>
  26.                         <input type="submit" value="Login">
  27.                     </form>
  28.                 </body>
  29.                 </html>
  30.                 ]])
  31.             }
  32.         }
  33.         # 处理登录请求
  34.         location = /login {
  35.             content_by_lua_block {
  36.                 ngx.req.read_body()
  37.                 local args = ngx.req.get_post_args()
  38.                 local username = args.username
  39.                 local password = args.password
  40.                 -- 设定你的用户名和密码
  41.                 local valid_username = "sit"
  42.                 local valid_password = "sit"
  43.                 if username == valid_username and password == valid_password then
  44.                     ngx.header["Set-Cookie"] = "auth=1; Path=/; HttpOnly"
  45.                     ngx.redirect("/nacos")
  46.                 else
  47.                     ngx.say("Wrong user or password!  Click the browser's 'Back' button to log in again")
  48.                     ngx.exit(ngx.HTTP_UNAUTHORIZED)
  49.                 end
  50.             }
  51.         }
  52.         # nacos路径
  53.         location /nacos/ {
  54.             # 如果认证不通过,就跳转到认证页面
  55.             if ($cookie_auth != "1") {
  56.                 return 302 /login.html;
  57.             }
  58.             # 如果认证通过,代理请求到后端nacos服务器
  59.             proxy_pass http://10.1.0.5:8848/nacos/;
  60.         }
  61.     }
  62. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表