Authelia,一个极简的SSO独立Web登陆页面
本文最后更新于 29 天前,其中的信息可能已经有所发展或是发生改变。

大家好,我是真境,欢迎阅读本篇文章。

今天是给大家带来的是一个Web项目 —— Authelia


一、前言

前几天在部署一个 图片生成的项目(我不知道能不能说,我博客备案了)。刚开始我是在本地上用,后面有一个朋友也要用,所以我打算将这个项目搭建在服务器上来供他使用。但是!我发现一个严重的问题 —— 这个项目是没有鉴权页面的,也就是说任何人只要有我的服务器地址,就可以随便刷我的 Token 来生成图片,那问题可大了!

那这时候我就想了几个方案:

  • 直接用 Nginx 自带的鉴权,但是我觉得太土了(就是浏览器 alert 那个风格)
  • 搭建一个专属隧道,但是太麻烦了!因为我们都要下载一个客户端来登陆这个隧道(PS:我博客有一个Easytier的教程 可以看看)

于是我就在想,有没有一个项目他是一个独立的Web页面,并且他可以和 Nginx 进行联动来完成登陆呢…?于是我问了下美国豆包,给我推荐了一个叫 Authelia。于是这个文章就出来啦…

二、项目&思路

这是项目的官网,欢迎大家来看看:

实现我的图片生成项目的鉴权思路如下:

访问者 -> 图片生成.com -> Nginx跳转到Authelia -> Authelia判断是否登陆 -> (是) -> 进入 图片生成.com
                                                                 |
                                                                 |_>(否) -> 要求你登陆

本教程所需要准备的东西为:

  • 图片生成.com
  • 登陆页面.com(啊 本教程只是作个示例,肯定可以用子域名的啦
  • 一台服务器

登陆页面你也可以用指定路径(如:图片生成.com/auth)来完成,我专门设置一个子域名是因为看着高级呀

这就是我们具体的实现过程,接下来就开始搭建吧

三、开始部署项目

既然这个项目支持 Docker,那我肯定直接 Docker部署啦。

1、部署 Authelia

安装 Docker(一键部署):

curl -fsSL https://get.docker.com | bash

创建生成一个 Docker Compose 文件,这是文件内容:

services:
  authelia:
    image: authelia/authelia:latest
    container_name: authelia
    restart: unless-stopped
    volumes:
      - /home/docker/authelia/config:/config # 写你实际的 config 的配置文件路径
    ports:
  # 这边我设置了仅限本地才能登陆,大家根据自己情况来做决定
  # 如果需要外网可以访问,请去掉 127.0.0.1:
      - "127.0.0.1:9091:9091"
    environment:
      - TZ=Asia/Shanghai

将其保存为 docker-compose.yml ,先不着急直接 compose up -d,我们先生成项目所需要的配置文件。

1️⃣生成用户密码的 Hash

顾名思义就是生成你密码的Hash值

docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password "你的密码"

完成命令后会生成类似 $argon2id$v=19$m=65536,t=3,p=4$… 的字符串,保存起来先

2️⃣生成配置所需要的JWT和会话密钥

输入以下命令,生成 64 位的安全随机字符串,一共要生成 3 个:

docker run --rm authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric

一样的,保存备用

3️⃣生成 config 文件夹

项目文件目录的结构为:

Authelia/
├── config /
│   ├── users_database.yml
│   └── configuration.yml
└── docker-compose.yml
一定!一定!一定!要配置好 Docker Compose 文件内的 Config 的实际路径!!

按照以上的文件结构来创建好文件,首先我们先配置 configuration.yml:

server:
  address: "tcp://0.0.0.0:9091" # 项目链接和端口 记得和 compose 的对应上!

log:
  level: info

identity_validation:
  reset_password:
    jwt_secret: "第一个64位安全随机字符串"

authentication_backend:
  file:
    path: /config/users_database.yml

access_control:
  default_policy: deny
  rules:
    - domain: "canvas.ntfs.uk"
      policy: one_factor

session:
  name: authelia_session
  secret: "第二个64位安全随机字符串"
  expiration: 1h
  inactivity: 5m
  cookies:
    - domain: "" # 根域名,比如说 baidu.com
      authelia_url: "https://登陆页面.com" # 填入你的登陆页面 URL,我写的是子域名
      default_redirection_url: "https://图片生成.com" # 填入重定向的链接即你登陆完成跳转的页面

storage:
  encryption_key: "第三个64位安全随机字符串"
  local:
    path: /config/db.sqlite3

notifier:
  filesystem:
    filename: /config/notification.txt

其次我们再来配置users_database.yml:

users:
  admin:
    displayname: "管理员"
    password: "$argon" # 完整填写刚刚生成的 Hash 密码
    email: [email protected]
    groups:
      - admins

你也可以多配置你朋友的,不过本教程就教你最简单的搭建方式。还没这么进阶(

users:
  admin:
    displayname: "管理员"
    password: "$argon2id$v=19$m=65536,t=3,p=4$..."
    email: [email protected]
    groups:
      - admins

  friend:
    displayname: "朋友账号"
    password: "$argon2id$v=19$m=65536,t=3,p=4$..." # 朋友的密码 Hash
    email: [email protected]
    groups:
      - users

4️⃣启动项目

配置完配置文件,保存之后直接启动 Authelia:

docker compose up -d

如果有问题可以查看日志:

docker compose logs

2、配置 Nginx 的内容

相信大伙都玩过 Nginx 了,我直接贴一个我自己的 Nginx 配置文件吧:

upstream 图片生成 {
    server 127.0.0.1:3200; # 图片生成的内网地址
    keepalive 64;
}

upstream authelia {
    server 127.0.0.1:9091; # 登陆页面的内网地址
}

# 1. 登录门户服务
server {
    listen 443 ssl;
    http2 on;
    server_name 登陆页面.com;

    # 这个部分是针对登陆页面的证书配置内容

    location / {
        proxy_pass http://authelia;
        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;
    }
}

# 2. 强制 HTTP 重定向
server {
    listen 80;
    server_name 图片生成.com 登陆页面.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

# 3. 图片生成 主站配置(受保护)
server {
    listen 443 ssl;
    http2 on;
    server_name 图片生成.com;

    # 这边的内容 包括证书内容全部省略
    # 根据需要受保护页面的配置内容来进行配置
    # 请勿盲目替换

    }

    # === 主站反代与保护 ===
    location / {
        # 启用鉴权
        auth_request /authelia;
        auth_request_set $target_url $scheme://$http_host$request_uri;
        
        # 未登录时自动跳转到漂亮的登录网页
        error_page 401 =302 https://auth.ntfs.uk/?rd=$target_url;

        # 鉴权通过后的常规反代
        proxy_pass http://图片生成;
        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;

        # WebSocket 支持
        # 这个也要根据自己的网站配置来进行设置,别玩挂了
    }
}
大部分内容都省略了,请根据自己受保护网站的配置进行。不要盲目复制粘贴!可以将上面的内容直接丢给AI,让他帮你修改和调整

完事之后记得测试 Nginx 文件的可用性:

nginx -t

测试成功后直接重启 Nginx

nginx -s reload

四、新增 Cloudflare 的安全验证(可选)

因为我的验证方式及其简单:只用了账号密码登录,那我需要添加一个人机验证来防止被爆破。

不过 authelia 似乎不支持 Cloudflare自带的 Trunstile,但是可以直接使用 WAF 来进行托管质询,进入 Cloudflare页面:

点击右上角的“创建规则” – “自定义规则”

按照图片上的内容进行配置:

然后选择“采取措施”“托管质询”

完事之后直接部署即可,访问页面试试看是否部署成功

当你看见这个页面的时候就代表部署成功了!

到这里,我们本篇文章的内容就到这结束了,感谢大家的阅读!

希望本文章能给你起到帮助!我是真境,我们下篇文章见

评论

  1. Windows Chrome 151.0.0.0
    4 周前
    2026-8-19 22:34:54

    deepseek的那个harness也没有鉴权或者登录页面,这么说也可以使用这个了


    查看图片
    image

    • 博主
      学游渊
      Windows Edge 151.0.0.0
      4 周前
      2026-8-19 22:36:42

      还真的是,dsh的API鉴权确实有点草率了

    • 博主
      学游渊
      Windows Edge 151.0.0.0
      4 周前
      2026-8-19 22:36:58

      还真的是,dsh的API鉴权确实有点草率了

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇