侧边栏壁纸
博主头像
是羊刀仙啊 博主等级

闲不下来!

  • 累计撰写 190 篇文章
  • 累计创建 51 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

为NAS/服务器补上认证缺口:Tinyauth快速实现外网登录保护

羊刀仙
2025-09-15 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

之前介绍过非常多的Docker应用,有的应用会自带一个前端认证。用NAS举例,本身的WEB自带登陆认证,还支持配置两步验证到WEB各种应用服务。再比如QB、TR、EMBY这些常见Docker服务都内置了登陆验证,但很多轻量级的工具类服务可能并没有(IT- tools等),别人知道你的服务域名后就能直接白嫖。

本期咱们就来介绍一款中间认证服务:Tinyauth,用于保护我们的应用服务。大家看看动图演示应该就能了解效果~

Jietu20250912-133002-HD.gif

Tinyauth 正在积极开发中,配置可能会经常更改。更新前请务必仔细阅读发行说明。

如果只是个人使用,Nginx/Caddy/Lucky 等自带的 BasicAuth 其实已经非常方便。

因为Lucky自带认证,并且Tinyauth官方文档明确对于Nginx Proxy Manager有很好的支持,所以就承接上一篇文章,我们基于NPM进行改造。

Lucky的认证如下图所示。大家如果觉得够用则无需部署Tinyauth。

截屏2025-09-12 13.24.58 拷贝.png

截屏2025-09-12 13.27.18 拷贝.png

Tinyauth 简介

Tinyauth 是一个由 Go 语言开发的 轻量级身份认证中间件,主要用于在自托管或容器化环境中为 Web 应用快速增加访问控制功能。它不需要修改原有应用,只需通过反向代理(如 Traefik、Nginx、Caddy)接入,就能实现登录保护。

✨ 主要特点

  • 轻量简洁:单个二进制文件即可运行,无额外依赖,资源占用极低。

  • 即开即用:配置简单,常见场景只需设置环境变量即可完成部署。

  • 多种认证方式:支持用户名密码认证,也支持 OAuth 登录(如 Google、GitHub)。

  • 反向代理友好:可与 Traefik、Nginx、Caddy 等无缝集成,适合 Homelab 和企业小型应用。

  • Cookie 统一认证:基于域名设置 Cookie,实现同一主域下多个应用的单点登录。

🔧 应用场景

  • 给 个人 NAS 服务(如 QNAP)增加外网访问保护。

  • 保护 内部工具(如 Portainer、Grafana、Whoami 等)。

  • 在 家庭实验室 或 小团队项目 中快速加一层身份验证,而无需搭建复杂的 OAuth 服务。

准备工作

我们需要准备生成用户名/密码哈希以及32字节随机密钥

SSH工具连接NAS,依次输入以下命令。将生成的内容复制备用。可参考图片。

# 交互生成用户名/密码哈希(整行复制)
docker run -it --rm ghcr.io/steveiliop56/tinyauth:v3 user create --interactive

# 输入用户名和密码每一步都要回车,最后移动键盘方向键,选择yes再回车一次即可
# 我设置的账户/密码为 ydxian/qnap1234

截屏2025-09-10 14.24.28.png

# 生成32字节随机密钥(整串复制),试过64会报错
openssl rand -hex 16

截屏2025-09-10 14.18.06.png

部署流程

先创建一个专用网络,方便需要反代的应用与NPM连通。

docker network create npm-net

查阅官方文档后,我给出的推荐代码如下:

services:
  app:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    restart: always
    environment:
      TZ: Asia/Shanghai
      DISABLE_IPV6: "true"
    volumes:
      - /share/Container/npm/data:/data
      - /share/Container/npm/letsencrypt:/etc/letsencrypt
    ports:
      - "81:81"      # NPM面板(仅内网)
      - "8442:80"    # 公网HTTP(非常用端口)
      - "8443:443"   # 公网HTTPS(非常用端口)
    networks:
      - npm-net

  tinyauth:
    image: ghcr.io/steveiliop56/tinyauth:v3
    container_name: tinyauth
    restart: always
    environment:
      - APP_URL=https://auth.19960509.xyz:8443    # 走NPM的8443
      - USERS=ydxian:$$2a$$10$$9Yc/rH90cPJEJjemF6oRmu9tbnClFyDhjSSjlRyJFPstuFqxr45Ky
      - SECRET=597c4353178836b87f78c5588fc6fc60
    networks:
      - npm-net
    ports:
      - "5202:3000"

networks:
  npm-net:
    external: true

需要注意的是,咱们国内用非标准端口号,APP_URL也要进行补齐。

将上面代码改写后,打开Container Station 创建新的应用程序。

截屏2025-09-10 16.26.27 拷贝.png

成功的日志参考。

截屏2025-09-10 16.59.27 拷贝.png

反向代理

这步是必要的~

打开NPM,我们要为Tinyauth进行反向代理。如下图填写相关信息后保存。要注意别勾选Block Common Exploits,如果启用,nginx 将不允许在查询参数中使用 URL,而这正是 Tinyauth 正常运行所必需的。

QQ20250911-203908.png

再次对这条反代进行编辑。因为上一篇我们申请了泛域名证书,这次就方便很多~保存即可。

QQ20250911-204207.png

QQ20250911-204255.png

接着浏览器输入域名+8443就能访问Tinyauth。

QQ20250911-205910.png

为应用添加验证

我的主NAS中部署了IT-Tools万能工具箱,这个服务是不带登录认证的,咱们就拿它来演示。

QQ20250911-204614.png

为了方便容器互通,部署代码:

services:
  it-tools:
    image: ghcr.io/corentinth/it-tools:latest
    container_name: it-tools
    ports:
      - "8864:80"       # 可留作本地直连排错;不是必须
    networks:
      - npm-net
    restart: always

networks:
  npm-net:
    external: true

重复上面步骤,为该服务做好反向代理。然后对其进行编辑,将下面的内容修改后粘贴进框内并保存。需要修改的位置已用中文标注。修改完后建议将注释都删除。

# Root location
location / {
  # Pass the request to the app
  proxy_pass          $forward_scheme://$server:$port;

  # Add other app specific config here

  # Tinyauth auth request
  auth_request /tinyauth;
  error_page 401 = @tinyauth_login;
}

# Tinyauth auth request
location /tinyauth {
  # Pass request to Tinyauth
  proxy_pass http://tinyauth:3000/api/auth/nginx;

  # Pass the request headers
  proxy_set_header x-forwarded-proto $scheme;
  proxy_set_header x-forwarded-host $http_host;
  proxy_set_header x-forwarded-uri $request_uri;
}

# Tinyauth login redirect
# 下面这个域名改成你自己的Tinyauth服务
location @tinyauth_login {
  return 302 https://auth.xxx.xyz:8443/login?redirect_uri=$scheme://$http_host$request_uri; 
}

换到最后一栏,我们将参数编辑后粘贴进框内后保存。

QQ20250911-210951.png

浏览器输入域名访问工具箱。

QQ20250911-211137.png

我从Chrome换成了Safari,因为缓存问题。其实新开个无痕也能验证。会自动跳转到验证界面,速度大家不用担心,很快~丝滑~

截屏2025-09-12 10.40.45 拷贝.png

输入上文SSH设置的账户密码,不要输入哈希值啊~回车登录~如下图所示,点击继续。

截屏2025-09-12 11.20.45 拷贝.png

然后就成功进入应用咯。

截屏2025-09-12 11.22.29 拷贝.png

0

评论区