当前位置: 首页 > news >正文

业务系统跳转Nacos免登录方案实践

业务系统跳转Nacos免登录方案实践

  • 前言
    • 序列图:
    • Nacos 登录接口
    • 示例代码
      • 1、JavaScript 示例
      • 2、Nginx 配置示例
    • 总结

前言

要求开发一个门户页面把现有的应用系统以卡片的形式集成进来,点击卡片能免登录跳转(这里划重点,核心诉求)到各系统,其中就包含了Nacos。要求:点击微服务管理平台卡片会跳转到 Nacos 的控制台。

序列图:

门户页NginxNacos调用代理后的登录接口代理转发返回Token信息调用成功后会返回 Token 信息并将其保存到 localStorage 中Token保存成功后 调用代理后的管理页面地址代理转发返回门户页NginxNacos

Nacos 登录接口

// Nginx 代理后的地址
http://ip:port/nacos/v1/auth/users/login

返回值:

{"accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyOTE2Nn0.2TogGhhr11_vLEjqKko1HJHUJEmsPuCxkur-CfNojDo","tokenTtl": 18000,"globalAdmin": true
}

示例代码

注意所有地址均为代理后地址

1、JavaScript 示例

此处用来模拟用户登录操作

const http = new XMLHttpRequest();
// nacos 登录接口
const url = "http://ip:port/nacos/v1/auth/users/login";
const formData = new window.FormData();
formData.append("username", "nacos");
formData.append("password", "nacos");
http.open("POST", url, true);
http.onreadystatechange = function () {if (http.readyState == 4 && http.status == 200) {localStorage.setItem("token",// 此处注意返回值格式,如果是字符串需要先转换成 JSON 对象JSON.stringify(JSON.parse(http.responseText)) );// 登录成功后打开 nacos 控制台页面window.location.href = "http://ip:port/nacos/#/";}
};
http.send(formData);

2、Nginx 配置示例

实际项目部署时页面和跳转的 Nacos 页面是不同源的,存在跨域操作。既然跨域,保存在 localStorage 中的 token 信息就不能共享,怎么解决呢,Nginx 该派上用场了

注意修改 ip 和 port

# HTTP
server {# Nginx 默认端口listen 80;# Nacos 代理 开头表示 uri 以某个常规字符串开头,理解为匹配 url路径即可location ^~/nacos/ {# Nacos 真实访问地址proxy_pass http://ip:port/nacos/;}# 缓存的对象location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|ico)$ {# 缓存的时间,30天 当用户第一次访问这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及以后继续访问该网站时,浏览器会检查加载已经缓存在用户浏览器本地的内容,就不会去服务器下载了,直到缓存的内容过期或被清除为止expires 30d;# 不记录访问日志access_log off;}
}

总结

1、增加一个模拟 Nacos 控制台登录过程
2、通过 Nginx 配置解决页面和 Nacos 控制台页面不同源的问题,保证用户鉴权成功

像 Nacos 控制台这种明文传输用户密码也就是作为内部工具使用可以,真要上线,安全测试肯定不能通过。我们可以基于这个思路进行优化调整

http://www.lryc.cn/news/609276.html

相关文章:

  • 电力电子技术知识总结-----PWM知识点
  • 【MybatisPlus】join关联查询MPJLambdaWrapper
  • Javaweb————Windows11系统和idea2023旗舰版手动配置Tomcat9全流程解析
  • 性能测试工具ApacheBench、Jmeter
  • ospf笔记和 综合实验册
  • 在Ansys Mechanical中对磨损进行建模
  • 重生之我在10天内卷赢C++ - DAY 10
  • 分布式文件系统05-生产级中间件的Java网络通信技术深度优化
  • STM32F103_Bootloader程序开发13 - 巧用逆向拷贝,实现固件更新的“准原子”操作,无惧升级中的意外掉电
  • Ethereum: 了解炙手可热 Layer 2 解决方案 Base
  • Spring AOP_2
  • Python 小数据池(Small Object Pool)详解
  • NX969NX972美光固态闪存NX975NX977
  • 深度学习中的三种Embedding技术详解
  • Maven - 依赖的生命周期详解
  • MySQL深度理解-MySQL锁机制
  • vllm0.8.5:思维链(Chain-of-Thought, CoT)微调模型的输出结果包括</think>,提供一种关闭思考过程的方法
  • Remix框架:高性能React全栈开发实战
  • 音视频学习(四十九):音频有损压缩
  • 数据结构-双链表
  • 网络通信与Socket套接字详解
  • Flink程序关键一步:触发环境执行
  • 13-day10生成式任务
  • 全面解析 BGE Embedding 模型:训练方式、模型系列与实战用法
  • python批量gif图片转jpg
  • C++ vector容器详解:从基础使用到高效实践
  • 【GitHub探索】Agent开发平台CozeStudio开源版本踩坑体验
  • Obsidian结合CI/CD实现自动发布
  • 【设计模式】4.装饰器模式
  • 第二节 YOLOv5参数