为jev模型服务增加密码保护有三种方案:①nginx反向代理+http basic auth,最轻量通用;②openwebui内置基础认证,v1.18.31+支持环境变量配置;③jev决策队列消费者层token校验,适用于celery等异步场景。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

给本地部署的 Jev 模型服务增加访问密码,是为了防止局域网内其他设备未经许可调用你的决策服务,尤其当 OpenWebUI 或自研前端监听在 0.0.0.0:8080 时,风险立即上升。
使用 Nginx 反向代理 + HTTP Basic Auth 实现鉴权
这是最轻量、最通用的方案,不修改 Jev 或 OpenWebUI 任何代码,仅靠 Web 服务器层拦截请求。
第一步:确认你已安装并运行 Nginx(Ubuntu/Debian 系统可执行 sudo apt install nginx)。
第二步:创建密码文件。执行以下命令,为用户 jev-user 设置密码(系统会提示输入两次):sudo htpasswd -c /etc/nginx/.jev-auth jev-user
第三步:编辑站点配置文件,通常位于 /etc/nginx/sites-enabled/default 或新建一个配置如 /etc/nginx/sites-enabled/jev-secure,写入以下内容:
upstream jev_backend {<br> server 127.0.0.1:8080;<br>}<br><br>server {<br> listen 8090;<br> server_name localhost;<br><br> location / {<br> auth_basic "Jev Decision API Restricted";<br> auth_basic_user_file /etc/nginx/.jev-auth;<br> proxy_pass http://jev_backend;<br> proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> }<br>}
第四步:测试配置语法并重载:sudo nginx -t && sudo systemctl reload nginx。若提示 success,说明配置生效。
第五步:停止原 OpenWebUI 直连服务(如正在运行 uvx open-webui@latest serve),改用 Nginx 端口访问——现在浏览器打开 http://YOUR_SERVER_IP:8090,会弹出登录框,输入 jev-user 和对应密码即可进入。所有对 /api/、/v1/chat/completions 等 Jev 接口的请求,都将被统一鉴权。
【注意:必须停掉原 8080 端口直连服务,否则 Nginx 代理将无法接管流量】
修改 OpenWebUI 启动参数启用内置基础认证
OpenWebUI v1.18.31+ 原生支持环境变量驱动的基础认证,无需额外组件,适合快速验证或开发环境。
方法一:启动时传入环境变量
执行:AUTH_TRUSTED_EMAILS=1 AUTH_USERNAME=admin AUTH_PASSWORD=your_secure_pass DATA_DIR=~/.open-webui uvx --python 3.11 open-webui@latest serve
从零搭建飞书机器人。支持 MiniMax/MiMo 等模型、工具调用(搜索/天气/百科/记忆)、Skill 架构。一站式交付可上线运行的飞书群聊 bot。基础版本,后续可自行升级能力
方法二:写入 .env 文件(推荐用于长期运行)
在启动目录下新建 .env 文件,填入三行:
AUTH_TRUSTED_EMAILS=1<br>AUTH_USERNAME=jev-admin<br>AUTH_PASSWORD=QwE#9xR!2mLp
然后直接运行 uvx --python 3.11 open-webui@latest serve 即可生效。首次访问页面将强制跳转至登录页,输入对应账号密码后才可使用界面及调用后端 Jev 接口。
【AUTH_TRUSTED_EMAILS=1 是必需项,否则认证逻辑不会触发】
在 Jev 决策队列消费者层加 Token 校验(面向异步任务场景)
如果你是通过异步 worker(如 Celery/RabbitMQ)调用 Jev 的 /decision 接口做批量决策,需在 consumer 端主动校验请求头中的 Token,而非依赖前端或反代层。
第一步:在 TaoToken 控制台为该 worker 创建专用 Key,例如命名为 async-jev-worker-prod,记录其完整密钥值(仅此一次可见)。
第二步:修改 worker 代码,在发起 HTTP 请求前添加认证头:
headers = {<br> "Authorization": "Bearer YOUR_TAOTOKEN_KEY_HERE",<br> "Content-Type": "application/json"<br>}<br>response = requests.post("http://localhost:8080/v1/decision", json=payload, headers=headers)
第三步:在 Jev 服务入口(如 FastAPI 的 middleware 或全局依赖)中添加校验逻辑:
@app.middleware("http")<br>async def verify_token(request: Request, call_next):<br> auth = request.headers.get("Authorization")<br> if not auth or not auth.startswith("Bearer "):<br> return JSONResponse({"error": "Unauthorized"}, status_code=401)<br> token = auth[7:]<br> if token != os.getenv("JEV_API_KEY"): # 该值应从环境变量读取,绝不可硬编码<br> return JSONResponse({"error": "Invalid token"}, status_code=403)<br> return await call_next(request)
第四步:将真实密钥通过环境变量注入服务进程,例如启动命令改为:JEV_API_KEY=sk-tao-xxxxxx-xxxxxx uvx --python 3.11 open-webui@latest serve










