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);
}
相关推荐
践行见远9 小时前
django之配置文件加载
django
【赫兹威客】浩哥10 小时前
【无标题】
python·spring·django·pyqt
winfredzhang11 小时前
从零构建家庭照片管理系统:Django 模块化单体实战,以及我踩到的 4 个真实坑
python·postgresql·django·sqlite·bootsrap
weixin_BYSJ198715 小时前
springboot智慧公共交通系统---附源码51123
java·javascript·spring boot·python·django·flask·php
衿心.15 小时前
Django TemplateDoesNotExist
数据库·django·sqlite
SelectDB技术团队3 天前
腾讯音乐内容库 ES 替代:从 Elasticsearch 到 Apache Doris 统一搜索分析引擎实践
elasticsearch·django·apache doris
willhu20083 天前
Windows 开机自动启动 Django 项目
后端·python·django
En^_^Joy4 天前
Django模板与静态文件使用指南
python·django·sqlite
weixin_BYSJ19874 天前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
En^_^Joy4 天前
Django中间件:请求拦截和响应(类似装饰器)
中间件·django·sqlite