Tinyauth 是一个非常轻量级的鉴权工具,相比 Authelia/Authentik/Keycloack 等更适合 HomeLab 使用;同时支持使用 OIDC 的鉴权方式,可以结合 GitHub/Google 等支持 OIDC 的第三方账号进行登录

Tinyauth 轻量级鉴权工具主页界面展示

部署 Tinyauth

对 Caddy 和 Tinyauth 解耦,分别使用 Docker Compose 进行部署;关于 Caddy 的安装使用可以参考使用 Caddy 作为 HomeLab 内网服务的代理

创建用户

Tinyauth 支持多种登录方式,如 GitHub/Google 账户,或者单独创建用户

docker run -i -t --rm ghcr.io/steveiliop56/tinyauth:v3 user create --interactive

将会显示交互界面,输入用户名和密码,并选择使用 Docker 的格式化输出:

  Username
  > admin

  Password
  > 123456

┃ Format the output for docker?
┃ > Yes
┃   No

将得到用户名和密码,这个信息后面会作为 Tinyauth 的环境变量使用;如果有多个用户,可以重复执行上面的命令创建

2025-08-31T14:48:50Z INF Creating user docker=true password=123456 username=admin
2025-08-31T14:48:50Z INF User created user=admin:$$2a$$10$$XjPRGRi5clgDD16LRaeEvetazg8roIUpS0dUOrqgFL51uD25ZCkl6

生成 SECRET

Tinyauth 需要一个 SECRET 用于加密 Cookie,可以使用下面的命令生成一个 32 位的随机字符串

openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32 && echo

将得到长度为 32 的随机字符串:

LcR2VFcDatCXSw2h7hkoCARAfUqVvAkG

部署 Tinyauth

使用 Docker Compose 部署 Tinyauth,环境变量需要使用上面生成的用户和 SECRET;

如果需要使用 GitHub 或者 Google 作为登录方式,可以参考官方文档OAuth with Github OAuth 和 OAuth with Google 进行配置;将对应的 Client ID 和 Secret 作为环境变量传入即可

  • docker-compose.yaml

APP_URL 需要设置为 Tinyauth 的访问地址,和 Caddy 配合使用时,可以通过指定 DNS 解析或者配置 hosts 文件的方式进行访问;关于环境变量的详细说明可以参考Configuration

services:
  tinyauth:
    container_name: tinyauth
    image: ghcr.io/steveiliop56/tinyauth:v3
    restart: unless-stopped
    ports:
      - 3000:3000
    environment:
      - APP_URL=http://auth.svc.homelab # Tinyauth 的访问地址
      - SECRET=LcR2VFcDatCXSw2h7hkoCARAfUqVvAkG # 上面生成的 SECRET
      - USERS=admin:$$2a$$10$$XjPRGRi5clgDD16LRaeEvetazg8roIUpS0dUOrqgFL51uD25ZCkl6 # 上面创建的用户,如果有多个用户使用逗号分隔
      - GENERIC_SKIP_SSL=true # 忽略ssl 证书错误
      - OAUTH_AUTO_REDIRECT=none # 关闭自动跳转
      # - GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com # Google OIDC 的 Client ID 和 Secret
      # - GOOGLE_CLIENT_SECRET=xxx
      # - GITHUB_CLIENT_ID=xxxx # GitHub OIDC 的 Client ID 和 Secret
      # - GITHUB_CLIENT_SECRET=xxxx

启动后可以通过访问对应的 3000 端口即可看到 Tinyauth 的登录页面

配置 Caddy 使用 Tinyauth 进行鉴权

在 Caddy 的配置文件中添加 Tinyauth 的鉴权配置,详细配置可以参考文档Caddy

为特定路由添加 Tinyauth 的鉴权配置

以 who.svc.homelab 为例,配置 Caddy 使用 Tinyauth 进行鉴权

  • Caddyfile
who.svc.homelab {
    tls internal
    route {
      forward_auth http://auth.svc.homelab:3000 {
        uri /api/auth/caddy
        copy_headers Remote-User Remote-Name Remote-Email Remote-Groups
      }
      reverse_proxy 10.0.0.2:8081
    }
}

这样配置之后访问 who.svc.homelab 时会先检查是否登录,如果没有登录会自动跳转到 Tinyauth 的登录页面,登录成功后会跳转回 who.svc.homelab 页面继续访问

Tinyauth 登录页面作为 Caddy 反向代理的鉴权入口

给多个路由添加鉴权配置

如果有多个路由需要添加鉴权配置,可以使用 Caddy 的 import 功能,将鉴权作为公共配置片段进行引用

  • Caddyfile
(tinyauth_forwarder) {
	forward_auth http://auth.svc.homelab:3000 {
		uri /api/auth/caddy
	}
}

who.svc.homelab {
	tls internal
	route {
		import tinyauth_forwarder
		reverse_proxy 10.0.0.2:8081
	}
}

*.example.com {
	tls internal
	route {
		import tinyauth_forwarder
		reverse_proxy 10.0.0.3:3000
	}
}

这样就可以给多个路由添加鉴权配置,使用统一的鉴权规则,方便统一管理

参考文档