IP白名单 + 预共享密钥跳转服务

有!可以通过 IP白名单 + 简单密钥 实现,完全不需要改动Java后端。

方案:IP白名单 + 预共享密钥(只需改Vue前端)

原理

复制代码
可视化系统 (192.168.92.16)           Django项目 (192.168.81.54:8000)
┌─────────────────────┐            ┌──────────────────────────┐
│ Vue前端              │            │ 信任此IP的请求           │
│ 直接跳转             │ ────GET──► │ 验证预共享密钥            │
│ /sso/login/?         │            │ 自动登录                 │
│   username=xxx      │            │                          │
│   sign=md5(key+user) │            │ 不验证时间戳和复杂签名   │
└─────────────────────┘            └──────────────────────────┘

Django端修改(简化验证逻辑)

toolName: edit_file_search_replace

status: success

filePath: d:\Files\code\diangoproject\app\views.py

changes: undefined

toolName: edit_file_search_replace

status: success

filePath: d:\Files\code\diangoproject\mysite\settings.py

changes: undefined

测试简化版SSO:

toolName: run_command

status: success

command: D:\software\Anaconda\envs\env_py3.8.10\python.exe -c "import hashlib; secret='django-insecure-9p0hc4+frflsh3tu0*8gr4-i@k754j61^9#l)4z#p)s3i%qf4-'; username='admin'; sign=hashlib.md5((secret+username).encode()).hexdigest(); print(f'username={username}'); print(f'sign={sign}')" undefined

toolName: run_command

status: success

command: Start-Sleep -Seconds 2; url = "http://localhost:8000/sso/login/?username=admin\&sign=c17ffac0afd6d09047c21a4ba7c120e5"; r = Invoke-WebRequest -Uri $url -UseBasicParsing -MaximumRedirection 0; "HTTP ( ( (r.StatusCode) Location: ( ( (r.Headers.Location)" undefined

简化版SSO测试通过!


方案总结:完全不需要改Java后端

只需要在Vue前端加一个跳转按钮

javascript 复制代码
// ========== Vue前端(只需这一处改动)==========

// 定义SSO配置
const SSO_SECRET = 'django-insecure-9p0hc4+frflsh3tu0*8gr4-i@k754j61^9#l)4z#p)s3i%qf4-';

// 生成签名
function generateSign(username) {
    return md5(SSO_SECRET + username);  // MD5(密钥+用户名)
}

// 跳转按钮
goToDjango() {
    const username = this.currentUser;  // 从Vuex或Cookie获取当前用户名
    const sign = this.generateSign(username);
    window.location.href = `http://192.168.81.54:8000/sso/login/?username=${username}&sign=${sign}`;
}

安全机制(IP白名单)

验证项 说明
IP白名单 只允许 192.168.92.16 访问
MD5签名 防止恶意构造请求

Django端配置

配置项
SSO_SHARED_SECRET django-insecure-9p0...
SSO_TRUSTED_IPS ['192.168.92.16', '127.0.0.1', 'localhost']

测试结果

复制代码
✅ 正确签名 → HTTP 302 → 跳转首页,登录成功

可视化系统需要做的改动

只需要在Vue前端加一个按钮,Java后端完全不需要改动:

html 复制代码
<!-- 可视化系统任意Vue组件 -->
<el-button @click="goToDjango">进入Django系统</el-button>
javascript 复制代码
// 对应的方法
goToDjango() {
    const username = this.user.username;  // 从当前会话获取
    const sign = this.generateSign(username);
    window.location.href = `http://192.168.81.54:8000/sso/login/?username=${username}&sign=${sign}`;
},
generateSign(username) {
    // MD5实现可以用 md5.js 库
    return md5('django-insecure-9p0hc4+frflsh3tu0*8gr4-i@k754j61^9#l)4z#p)s3i%qf4-' + username);
}
相关推荐
码云骑士4 天前
31-慢查询排查全流程(上)-Django-Debug-Toolbar与EXPLAIN入门
后端·python·django
龙腾AI白云4 天前
数字孪生和世界模型,二者的技术边界正在慢慢融合吗?
人工智能·django·知识图谱
码云骑士4 天前
30-在线图书管理系统-Django从零搭建到上线部署完整实战
后端·python·django
2601_961875245 天前
花生十三资源盘|电子版|全科
python·django·flask·virtualenv·scikit-learn·pygame·tornado
码云骑士5 天前
28-Docker部署Django(下)-docker-compose编排与静态文件处理
docker·容器·django
码云骑士5 天前
23-Django-ORM的N+1问题-select_related与prefetch_related详解
后端·python·django
摸摸芋5 天前
Django框架(1)
后端·python·django
码云骑士5 天前
27-Docker部署Django(上)-从2GB到180MB的镜像瘦身实战
docker·容器·django
杰杰7985 天前
DRF的分页讲解-入门篇 三个基础分页类介绍
python·django
王小王-1235 天前
基于电脑硬件市场数据分析与可视化系统
数据库·数据分析·django·sqlite·电脑·电脑硬件数据·电脑硬件市场分析