DeOldify Web UI权限控制Basic Auth基础认证简易接入方案1. 项目背景与需求想象一下你搭建了一个很酷的AI图像上色服务基于DeOldify模型能把黑白老照片瞬间变成彩色。Web界面漂亮API也好用同事朋友都夸你厉害。但问题来了这个服务放在公网上谁都能访问。某天你发现服务器流量异常一查日志好家伙不知道哪来的爬虫在疯狂调用你的API不仅占用了大量计算资源还可能产生不必要的费用。这时候你就需要一个简单的权限控制方案——不是所有人都能随便用你的服务。今天我要分享的就是如何给DeOldify Web UI加上最基础、最实用的权限控制Basic Auth基础认证。1.1 什么是Basic Auth简单说Basic Auth就是最传统的“用户名密码”验证方式。当你访问一个受保护的网页时浏览器会弹出一个登录框让你输入用户名和密码。输入正确才能继续访问输入错误就进不去。虽然它不如OAuth、JWT这些现代认证方式强大但对于内部工具、小型项目、快速原型来说Basic Auth有几个明显的优势简单易实现几乎所有的Web服务器都原生支持零客户端依赖不需要安装任何SDK或库配置快速几分钟就能搞定够用就好对于不需要复杂权限管理的场景完全够用1.2 我们的目标今天我们要做的就是给现有的DeOldify Web UI服务加上Basic Auth保护实现以下功能访问Web界面时需要输入用户名密码调用API时也需要提供认证信息不同的用户可以有不同的权限可选配置过程简单不影响原有功能2. 方案选择与对比在开始动手之前我们先看看有哪些可选方案以及为什么选择Basic Auth。2.1 常见权限控制方案对比方案优点缺点适用场景Basic Auth配置简单、无需额外依赖、所有浏览器都支持安全性相对较低、密码每次请求都传输内部工具、测试环境、简单API保护API Key简单易用、可以随时撤销Key容易泄露、权限控制较粗第三方API集成、机器对机器通信JWT Token无状态、可包含丰富信息、安全性好需要客户端处理token、有过期时间管理用户系统、分布式服务、移动应用OAuth 2.0行业标准、功能强大、支持第三方登录配置复杂、需要授权服务器第三方应用集成、社会化登录2.2 为什么选择Basic Auth对于我们的DeOldify服务来说使用场景简单主要是内部使用或小范围分享部署环境可控通常部署在私有网络或受控环境用户数量有限不需要复杂的用户管理系统开发成本低不需要改动现有代码逻辑维护简单密码文件管理起来很方便最重要的是Basic Auth可以通过Nginx反向代理来实现完全不需要修改DeOldify的Python代码。这意味着零代码侵入零风险破坏现有功能随时可以启用或禁用3. 环境准备与检查在开始配置之前我们需要先确认一下现有的环境。3.1 检查当前服务状态首先确保你的DeOldify服务正在运行# 检查服务状态 supervisorctl status cv-unet-colorization # 如果服务没有运行先启动它 supervisorctl start cv-unet-colorization # 检查服务是否正常响应 curl http://localhost:7860/health你应该看到类似这样的响应{ service: cv_unet_image-colorization, status: healthy, model_loaded: true }3.2 确认Nginx已安装Basic Auth配置主要依赖Nginx所以需要先确认Nginx是否已安装# 检查Nginx版本 nginx -v # 如果提示命令不存在需要先安装Nginx # Ubuntu/Debian系统 sudo apt update sudo apt install nginx -y # CentOS/RHEL系统 sudo yum install nginx -y3.3 了解当前网络架构在配置之前我们需要搞清楚当前的网络访问路径用户浏览器 → 公网IP:端口 → Nginx如果有 → DeOldify服务(7860端口)大多数情况下你的DeOldify服务可能已经通过Nginx做了反向代理。如果没有我们正好可以一起配置。4. Basic Auth配置详解现在进入正题一步步配置Basic Auth。4.1 创建密码文件Basic Auth的核心就是一个密码文件里面存储了用户名和加密后的密码。4.1.1 安装密码工具首先安装apache2-utils包含htpasswd工具# Ubuntu/Debian sudo apt install apache2-utils -y # CentOS/RHEL sudo yum install httpd-tools -y4.1.2 创建密码文件创建一个目录来存放密码文件建议放在安全的位置# 创建目录 sudo mkdir -p /etc/nginx/conf.d/auth # 设置目录权限 sudo chmod 700 /etc/nginx/conf.d/auth创建第一个用户比如用户名为admin# 创建密码文件并添加用户 sudo htpasswd -c /etc/nginx/conf.d/auth/deoldify.passwd admin系统会提示你输入密码并确认一次。比如输入密码SecurePass123!。重要提示-c参数表示创建新文件。如果文件已存在再次使用-c会覆盖原有文件。添加第二个用户时不要用-c# 添加第二个用户比如给同事用 sudo htpasswd /etc/nginx/conf.d/auth/deoldify.passwd colleague # 添加第三个用户 sudo htpasswd /etc/nginx/conf.d/auth/deoldify.passwd guest4.1.3 查看密码文件让我们看看密码文件长什么样sudo cat /etc/nginx/conf.d/auth/deoldify.passwd你会看到类似这样的内容admin:$apr1$5cI7Q4zW$X3p6F9h8JkL2mN1oPqRSt. colleague:$apr1$8dK3M2nL$Z7yT1uV4wX5rC6bA9sDfGh guest:$apr1$2fE5R7tY$N9mK4jL3hG6fD8sA1qWzXc注意密码是加密存储的不是明文。这是使用Apache的apr1算法加密的结果。4.2 配置Nginx反向代理现在我们来配置Nginx让它作为反向代理并启用Basic Auth。4.2.1 创建Nginx配置文件创建一个新的Nginx配置文件sudo nano /etc/nginx/conf.d/deoldify-auth.conf4.2.2 基础配置模板根据你的使用场景选择以下配置之一场景A全新的Nginx配置如果之前没有配置过server { listen 80; server_name your-domain.com; # 改成你的域名或IP # 启用Basic Auth auth_basic DeOldify Authentication Required; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify.passwd; # 代理到DeOldify服务 location / { proxy_pass http://localhost:7860; # 以下是一些常用的代理设置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } # 健康检查接口可以不需要认证可选 location /health { proxy_pass http://localhost:7860/health; auth_basic off; # 关闭这个路径的认证 } }场景B在现有配置上添加认证如果已经有Nginx配置找到你现有的Nginx配置文件通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/在相应的server块中添加server { # ... 你现有的配置 ... # 在location块前添加认证 auth_basic DeOldify Authentication Required; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify.passwd; location / { # ... 你现有的代理配置 ... } }4.2.3 高级配置按路径设置不同权限如果你想让某些路径不需要认证或者需要不同的用户权限server { listen 80; server_name your-domain.com; # 默认所有路径都需要认证 auth_basic DeOldify Authentication Required; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify.passwd; # 根路径和UI界面 location / { proxy_pass http://localhost:7860; # ... 代理设置 ... } location /ui { proxy_pass http://localhost:7860/ui; # ... 代理设置 ... } # 健康检查 - 不需要认证 location /health { proxy_pass http://localhost:7860/health; auth_basic off; } # API接口 - 需要认证 location /colorize { proxy_pass http://localhost:7860/colorize; # ... 代理设置 ... # 限制请求方法 limit_except POST { deny all; } } # 静态文件如果有 - 不需要认证 location /static/ { proxy_pass http://localhost:7860/static/; auth_basic off; } }4.3 测试Nginx配置在重启Nginx之前一定要测试配置是否正确# 测试Nginx配置语法 sudo nginx -t如果看到这样的输出说明配置正确nginx: configuration file /etc/nginx/nginx.conf test is successful如果有错误会提示具体的错误信息和行号根据提示修改即可。4.4 重启Nginx服务配置测试通过后重启Nginx使配置生效# 重新加载配置推荐不会中断现有连接 sudo nginx -s reload # 或者完全重启 sudo systemctl restart nginx检查Nginx服务状态sudo systemctl status nginx5. 验证Basic Auth效果现在让我们测试一下配置是否生效。5.1 测试Web界面访问打开浏览器访问你的DeOldify服务地址比如http://your-domain.com或http://your-ip。你应该会看到一个登录弹窗─────────────────────────────── │ DeOldify Authentication │ │ Required │ │ │ │ Username: [___________] │ │ Password: [___________] │ │ │ │ [取消] [登录] │ ───────────────────────────────输入之前创建的用户名和密码比如admin和SecurePass123!点击登录。如果认证成功就会正常显示DeOldify的Web界面。如果认证失败浏览器会再次弹出登录框通常最多3次。5.2 测试API接口访问5.2.1 不带认证的API调用先试试不带认证信息的调用curl -X POST http://your-domain.com/colorize \ -F imagetest.jpg你会收到401 Unauthorized错误html headtitle401 Authorization Required/title/head body centerh1401 Authorization Required/h1/center hrcenternginx/1.18.0/center /body /html5.2.2 带认证的API调用现在带上Basic Auth认证信息# 方式1直接在URL中包含用户名密码不推荐因为密码会显示在命令行历史中 curl -X POST http://admin:SecurePass123!your-domain.com/colorize \ -F imagetest.jpg # 方式2使用-u参数相对安全 curl -X POST http://your-domain.com/colorize \ -u admin:SecurePass123! \ -F imagetest.jpg # 方式3手动设置Authorization头最灵活 # 先生成Base64编码的认证字符串 echo -n admin:SecurePass123! | base64 # 输出YWRtaW46U2VjdXJlUGFzczEyMyE # 然后使用这个编码 curl -X POST http://your-domain.com/colorize \ -H Authorization: Basic YWRtaW46U2VjdXJlUGFzczEyMyE \ -F imagetest.jpg如果认证成功你会得到正常的JSON响应{ success: true, output_img_base64: iVBORw0KGgoAAAANSUhEUgAA..., format: png }5.2.3 在Python代码中添加认证如果你有现有的Python代码调用DeOldify API需要添加认证信息import requests import base64 # 服务地址现在需要认证 SERVICE_URL http://your-domain.com # 认证信息 USERNAME admin PASSWORD SecurePass123! def colorize_image_with_auth(image_path): 带认证的图片上色 # 方式1使用requests的auth参数最简单 with open(image_path, rb) as f: files {image: f} response requests.post( f{SERVICE_URL}/colorize, filesfiles, auth(USERNAME, PASSWORD) # 添加这行 ) # 方式2手动设置Authorization头 # credentials f{USERNAME}:{PASSWORD} # encoded_credentials base64.b64encode(credentials.encode()).decode() # headers {Authorization: fBasic {encoded_credentials}} # response requests.post(f{SERVICE_URL}/colorize, filesfiles, headersheaders) # 处理响应 if response.status_code 200: result response.json() if result[success]: print(上色成功) # ... 处理图片数据 ... else: print(f上色失败: {result}) elif response.status_code 401: print(认证失败用户名或密码错误) elif response.status_code 403: print(权限不足) else: print(f请求失败状态码: {response.status_code}) return response # 使用示例 colorize_image_with_auth(old_photo.jpg)5.3 测试健康检查接口还记得我们配置中把/health路径设置为不需要认证吗测试一下# 不需要认证 curl http://your-domain.com/health # 应该直接返回健康状态 { service: cv_unet_image-colorization, status: healthy, model_loaded: true }6. 用户管理与权限控制Basic Auth虽然简单但我们也可以实现一些基本的用户管理功能。6.1 用户管理脚本创建一个用户管理脚本方便日常操作#!/bin/bash # 文件/usr/local/bin/manage_deoldify_users.sh # 用法sudo manage_deoldify_users.sh [add|remove|list|change] [username] PASSWD_FILE/etc/nginx/conf.d/auth/deoldify.passwd BACKUP_DIR/etc/nginx/conf.d/auth/backup # 创建备份目录 mkdir -p $BACKUP_DIR case $1 in add) if [ -z $2 ]; then echo Usage: $0 add username exit 1 fi # 备份原文件 cp $PASSWD_FILE $BACKUP_DIR/deoldify.passwd.$(date %Y%m%d_%H%M%S) # 添加用户 htpasswd $PASSWD_FILE $2 echo 用户 $2 添加成功 # 重新加载Nginx nginx -s reload ;; remove) if [ -z $2 ]; then echo Usage: $0 remove username exit 1 fi # 备份原文件 cp $PASSWD_FILE $BACKUP_DIR/deoldify.passwd.$(date %Y%m%d_%H%M%S) # 删除用户使用sed删除包含用户名的行 sed -i /^$2:/d $PASSWD_FILE echo 用户 $2 删除成功 # 重新加载Nginx nginx -s reload ;; list) echo 当前用户列表 echo -------------- cut -d: -f1 $PASSWD_FILE | sort echo -------------- echo 总计: $(wc -l $PASSWD_FILE) 个用户 ;; change) if [ -z $2 ]; then echo Usage: $0 change username exit 1 fi # 备份原文件 cp $PASSWD_FILE $BACKUP_DIR/deoldify.passwd.$(date %Y%m%d_%H%M%S) # 修改密码 htpasswd $PASSWD_FILE $2 echo 用户 $2 密码修改成功 # 重新加载Nginx nginx -s reload ;; *) echo DeOldify用户管理工具 echo 用法: $0 {add|remove|list|change} [username] echo echo 示例: echo $0 add john # 添加用户john echo $0 remove john # 删除用户john echo $0 list # 列出所有用户 echo $0 change john # 修改john的密码 exit 1 ;; esac给脚本执行权限sudo chmod x /usr/local/bin/manage_deoldify_users.sh使用示例# 添加用户 sudo manage_deoldify_users.sh add alice # 列出所有用户 sudo manage_deoldify_users.sh list # 修改密码 sudo manage_deoldify_users.sh change alice # 删除用户 sudo manage_deoldify_users.sh remove alice6.2 多级别权限控制虽然Basic Auth本身不支持复杂的权限控制但我们可以通过多个密码文件来实现简单的权限分级# 创建不同权限级别的密码文件 sudo htpasswd -c /etc/nginx/conf.d/auth/deoldify_admin.passwd admin sudo htpasswd -c /etc/nginx/conf.d/auth/deoldify_user.passwd user1 sudo htpasswd /etc/nginx/conf.d/auth/deoldify_user.passwd user2 sudo htpasswd -c /etc/nginx/conf.d/auth/deoldify_guest.passwd guest然后在Nginx配置中根据不同路径设置不同的密码文件server { listen 80; server_name your-domain.com; # 管理后台 - 需要管理员权限 location /admin/ { proxy_pass http://localhost:7860/admin/; auth_basic Admin Area; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify_admin.passwd; } # API接口 - 需要用户权限 location /api/ { proxy_pass http://localhost:7860/; auth_basic API Access; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify_user.passwd; # 限制请求频率防止滥用 limit_req zoneapi burst10 nodelay; } # 公开界面 - 只需要访客权限 location / { proxy_pass http://localhost:7860/; auth_basic Guest Access; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify_guest.passwd; } # 健康检查 - 完全公开 location /health { proxy_pass http://localhost:7860/health; auth_basic off; } } # 定义限流区域 http { limit_req_zone $binary_remote_addr zoneapi:10m rate1r/s; # ... 其他配置 ... }6.3 密码策略与安全虽然Basic Auth比较简单但我们还是要注意安全#!/bin/bash # 密码安全检查脚本 # 文件/usr/local/bin/check_password_security.sh PASSWD_FILE/etc/nginx/conf.d/auth/deoldify.passwd echo 密码安全检查 echo 检查时间: $(date) echo # 检查文件权限 echo 1. 文件权限检查: ls -la $PASSWD_FILE | awk {print 权限: $1 所有者: $3 所属组: $4} if [[ $(stat -c %a $PASSWD_FILE) -gt 600 ]]; then echo 警告: 密码文件权限过宽建议设置为600 echo 修复命令: sudo chmod 600 $PASSWD_FILE else echo 良好: 文件权限设置正确 fi echo # 统计用户数量 USER_COUNT$(wc -l $PASSWD_FILE) echo 2. 用户数量: $USER_COUNT 个 if [ $USER_COUNT -gt 10 ]; then echo 提示: 用户数量较多考虑是否需要清理 fi echo # 列出所有用户 echo 3. 用户列表: cut -d: -f1 $PASSWD_FILE | while read user; do echo - $user done echo echo 安全建议 echo 1. 定期更换密码建议每90天 echo 2. 删除不再使用的用户账号 echo 3. 不要使用简单密码如123456、password等 echo 4. 考虑启用HTTPS加密传输 echo 5. 监控认证日志发现异常登录尝试7. 高级功能与优化7.1 启用HTTPS加密Basic Auth的密码是Base64编码传输的虽然不是明文但Base64很容易解码。如果在公网使用强烈建议启用HTTPS。7.1.1 使用Lets Encrypt免费证书# 安装Certbot sudo apt install certbot python3-certbot-nginx -y # 获取并安装证书 sudo certbot --nginx -d your-domain.com # 测试自动续期 sudo certbot renew --dry-runCertbot会自动修改Nginx配置添加SSL相关设置。7.1.2 手动配置HTTPS如果你有其他的SSL证书可以手动配置server { listen 443 ssl http2; server_name your-domain.com; # SSL证书配置 ssl_certificate /path/to/your/certificate.crt; ssl_certificate_key /path/to/your/private.key; # SSL优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Basic Auth配置 auth_basic DeOldify Authentication Required; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify.passwd; # 代理配置 location / { proxy_pass http://localhost:7860; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # HTTP重定向到HTTPS server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; }7.2 日志记录与监控记录认证日志方便排查问题和安全审计# 在http块中添加日志格式定义 http { # 定义认证日志格式 log_format auth_log $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; # ... 其他配置 ... } # 在server块中使用 server { # ... 其他配置 ... # 认证日志 access_log /var/log/nginx/deoldify_auth.log auth_log; # 错误日志 error_log /var/log/nginx/deoldify_error.log; location / { # ... 代理配置 ... } }查看认证日志# 实时查看认证日志 sudo tail -f /var/log/nginx/deoldify_auth.log # 查看今天的认证失败记录 sudo grep 401 /var/log/nginx/deoldify_auth.log | grep $(date %Y-%m-%d) # 统计每个用户的访问次数 sudo awk {print $3} /var/log/nginx/deoldify_auth.log | grep -v ^- | sort | uniq -c | sort -nr7.3 限流与防滥用防止恶意用户暴力破解密码或过度使用APIhttp { # 定义限流区域 # 认证接口限流每分钟最多5次尝试 limit_req_zone $binary_remote_addr zoneauth:10m rate5r/m; # API接口限流每秒最多1次请求突发10次 limit_req_zone $binary_remote_addr zoneapi:10m rate1r/s; # 连接数限制 limit_conn_zone $binary_remote_addr zoneaddr:10m; } server { # ... 其他配置 ... # 对所有请求先进行认证限流 location / { limit_req zoneauth burst5 nodelay; # 认证检查 auth_basic DeOldify Authentication Required; auth_basic_user_file /etc/nginx/conf.d/auth/deoldify.passwd; # 认证通过后的限流 limit_req zoneapi burst10 nodelay; limit_conn addr 10; proxy_pass http://localhost:7860; } # 健康检查不需要限流 location /health { auth_basic off; limit_req off; limit_conn off; proxy_pass http://localhost:7860/health; } }7.4 故障排除脚本创建一个一键故障排除脚本#!/bin/bash # 文件/usr/local/bin/deoldify_auth_debug.sh echo DeOldify认证服务调试工具 echo 运行时间: $(date) echo echo 1. 检查Nginx服务状态... sudo systemctl status nginx --no-pager -l echo echo 2. 检查Nginx配置... sudo nginx -t echo echo 3. 检查密码文件... if [ -f /etc/nginx/conf.d/auth/deoldify.passwd ]; then echo 密码文件存在 echo 用户数量: $(wc -l /etc/nginx/conf.d/auth/deoldify.passwd) echo 文件权限: $(stat -c %a /etc/nginx/conf.d/auth/deoldify.passwd) else echo 警告: 密码文件不存在! fi echo echo 4. 检查DeOldify服务状态... curl -s http://localhost:7860/health || echo DeOldify服务不可达 echo echo 5. 检查认证功能... echo 测试认证需要输入密码... curl -s -u test:test http://localhost/health 21 | grep -q 401 echo 认证功能正常 || echo 认证功能异常 echo echo 6. 查看最近错误日志... sudo tail -20 /var/log/nginx/error.log 2/dev/null || echo 错误日志不存在 echo echo 调试完成 echo 常见问题: echo 1. 如果Nginx配置测试失败检查配置文件语法 echo 2. 如果认证失败确认密码文件路径和权限 echo 3. 如果服务不可达检查DeOldify是否运行 echo 4. 查看详细日志: sudo tail -f /var/log/nginx/error.log8. 总结通过今天的分享我们完成了DeOldify Web UI的Basic Auth权限控制接入。让我们回顾一下关键要点8.1 实现的核心功能基础认证保护为Web界面和API接口添加了用户名密码验证零代码侵入通过Nginx反向代理实现无需修改DeOldify原有代码灵活配置支持按路径设置不同的认证规则用户管理提供了简单的用户添加、删除、修改功能安全增强支持HTTPS、日志记录、限流防护8.2 方案优势总结简单易用配置过程简单维护成本低兼容性好所有现代浏览器和HTTP客户端都支持性能影响小Nginx处理认证对后端服务几乎无影响灵活可控可以随时启用、禁用或调整认证规则安全够用对于内部工具和小型项目安全性完全足够8.3 适用场景建议这个Basic Auth方案特别适合以下场景内部工具团队内部使用的AI工具测试环境需要限制访问的测试服务原型演示给客户演示时需要简单保护小型项目用户数量有限不需要复杂权限系统临时保护在开发完整认证系统前的临时方案8.4 下一步改进方向如果你需要更强大的功能可以考虑集成数据库将用户信息存储在数据库中而不是文件添加多因素认证结合短信验证码或TOTP实现单点登录与企业现有的认证系统集成细化权限控制基于角色的访问控制RBAC审计日志更详细的用户操作日志记录8.5 最后的小提示定期更换密码建议每3-6个月更换一次密码监控日志关注认证失败日志及时发现异常尝试备份配置修改配置前做好备份测试验证每次修改后都要全面测试文档更新更新团队内部的使用文档Basic Auth虽然是个古老的技术但在合适的场景下它依然是一个非常实用、高效的解决方案。希望今天的分享能帮助你更好地保护你的DeOldify服务获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。