其實最近發了篇但是黑盒這邊不讓過哈哈~已經明白啥是高壓線了,之前的Lucky教程也是
感興趣的可以去我的BLOG玩~
之前介紹過非常多的Docker應用,有的應用會自帶一個前端認證。用NAS舉例,本身的WEB自帶登陸認證,還支持配置兩步驗證到WEB各種應用服務。再比如QB、TR、EMBY這些常見Docker服務都內置了登陸驗證,但很多輕量級的工具類服務可能並沒有(IT- tools等),別人知道你的服務域名後就能直接白嫖。
本期咱們就來介紹一款中間認證服務:Tinyauth,用於保護我們的應用服務。大家看看動圖演示應該就能瞭解效果~
Tinyauth 正在積極開發中,配置可能會經常更改。更新前請務必仔細閱讀發行說明。
如果只是個人使用,像Lucky.CADDY 等自帶的 BasicAuth 其實已經非常方便。
因爲Lucky自帶認證,並且Tinyauth官方文檔明確對於NPM有很好的支持,所以就承接上一篇文章,我們基於NPM進行改造。
Lucky的認證如下圖所示。大家如果覺得夠用則無需部署Tinyauth。
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
# 生成32字節隨機密鑰(整串複製),試過64會報錯
openssl rand -hex 16
部署流程
先創建一個專用網絡,方便需要反代的應用與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.xxx.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 創建新的應用程序。
成功的日誌參考。
反代HTTPS
這步是必要的~
打開NPM,我們要爲Tinyauth操作。如下圖填寫相關信息後保存。要注意別勾選Block Common Exploits,如果啓用,將不允許在查詢參數中使用 URL,而這正是 Tinyauth 正常運行所必需的。
再次對這條進行編輯。因爲上一篇我們申請了泛域名證書,這次就方便很多~保存即可。
接着瀏覽器輸入域名+8443就能訪問Tinyauth。
爲應用添加驗證
我的主NAS中部署了IT-Tools萬能工具箱,這個服務是不帶登錄認證的,咱們就拿它來演示。
爲了方便容器互通,部署代碼:
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; }
換到最後一欄,我們將參數編輯後粘貼進框內後保存。
瀏覽器輸入域名訪問工具箱。
我從Chrome換成了Safari,因爲緩存問題。其實新開個無痕也能驗證。會自動跳轉到驗證界面,速度大家不用擔心,很快~絲滑~
輸入上文SSH設置的賬戶密碼,不要輸入哈希值啊~回車登錄~如下圖所示,點擊繼續。
然後就成功進入應用咯。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com