Go Authelia:强大的开源身份验证与授权代理
项目概述
Authelia 是一个用 Go 语言编写的开源身份验证和授权代理,旨在为 Web 应用程序提供额外的安全层。它作为一个反向代理运行,在用户访问受保护的应用程序之前强制执行身份验证策略。Authelia 的设计理念是简单、轻量且易于部署,特别适合家庭实验室、中小型企业和需要增强安全性的云原生环境。
核心特性
1. 多因素身份验证支持
- TOTP(基于时间的一次性密码)
- WebAuthn(FIDO2/CTAP2)
- 移动推送通知
- 电子邮件验证码
2. 灵活的访问控制
- 基于规则的路由策略
- 细粒度的权限管理
- 支持正则表达式匹配
- 时间段限制访问
3. 集成能力
- 支持 LDAP、Active Directory
- 与多种数据库后端兼容(MySQL、PostgreSQL、SQLite)
- 可与 Traefik、Nginx、Caddy 等反向代理集成
- 支持 Kubernetes Ingress 注解
4. 安全特性
- 密码策略强制执行
- 防止暴力破解攻击
- 安全头自动添加
- 会话管理
技术架构
Authelia 采用 Go 语言开发,充分利用了 Go 的并发特性和高性能。其架构主要包括:
- 认证门户:用户交互界面
- 策略引擎:访问控制规则评估
- 会话管理:用户状态维护
- 存储层:配置和用户数据持久化
- API 服务:管理接口和集成端点
安装与部署示例
Docker Compose 部署
text
version: '3.8'
services:
authelia:
image: authelia/authelia:latest
container_name: authelia
volumes:
- ./config:/config
- ./users_database.yml:/config/users_database.yml
environment:
- TZ=Asia/Shanghai
ports:
- "9091:9091"
restart: unless-stopped
基本配置示例
text
# config/configuration.yml
host: 0.0.0.0
port: 9091
log_level: debug
jwt_secret: your_jwt_secret_here
default_redirection_url: https://home.example.com
totp:
issuer: authelia.com
period: 30
skew: 1
authentication_backend:
file:
path: /config/users_database.yml
password:
algorithm: argon2id
iterations: 1
salt_length: 16
parallelism: 8
memory: 64
access_control:
default_policy: deny
rules:
- domain: "home.example.com"
policy: bypass
- domain: "*.example.com"
policy: one_factor
- domain: "secure.example.com"
policy: two_factor
使用场景实例
场景1:保护家庭服务
假设您运行了多个自托管服务(如 Nextcloud、Jellyfin、Home Assistant),可以使用 Authelia 为这些服务统一添加身份验证层:
text
# Nginx 配置示例
server {
listen 443 ssl;
server_name nextcloud.example.com;
location / {
auth_request /authelia;
auth_request_set $user $upstream_http_remote_user;
proxy_set_header Remote-User $user;
proxy_pass http://nextcloud:80;
}
location = /authelia {
internal;
proxy_pass http://authelia:9091/api/verify;
}
}
场景2:企业应用保护
对于需要不同访问级别的企业应用:
text
# Authelia 访问规则
access_control:
default_policy: deny
rules:
- domain: "hr.example.com"
policy: two_factor
subject: "group:hr"
- domain: "dev.example.com"
policy: one_factor
subject: "group:developers"
- domain: "public.example.com"
policy: bypass
场景3:Kubernetes 集成
text
# Kubernetes Ingress 注解
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: protected-app
annotations:
traefik.ingress.kubernetes.io/router.middlewares: default-authelia@kubernetescrd
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
API 使用示例
验证用户凭据
text
package main
import (
"fmt"
"net/http"
"bytes"
)
func main() {
url := "https://authelia.example.com/api/firstfactor"
jsonData := `{
"username": "user@example.com",
"password": "securepassword",
"keepMeLoggedIn": true
}`
resp, err := http.Post(url, "application/json", bytes.NewBuffer([]byte(jsonData)))
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Response status:", resp.Status)
}
获取用户信息
text
curl -X GET https://authelia.example.com/api/user/info \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
优势与特点
- 高性能:Go 语言编译为静态二进制文件,启动快速,内存占用低
- 易于部署:提供 Docker 镜像和详细的文档
- 可扩展性:模块化设计,支持插件和自定义扩展
- 社区活跃:活跃的开发和维护团队,定期更新安全补丁
- 云原生友好:完美适配容器化和 Kubernetes 环境
最佳实践
生产环境部署建议:
- 使用外部数据库(PostgreSQL/MySQL)而非 SQLite
- 配置 TLS 加密通信
- 定期备份配置和数据库
- 启用审计日志
安全配置建议:
- 使用强密码策略
- 启用多因素认证
- 配置适当的会话超时
- 定期轮换密钥和证书
总结
Authelia 作为一个用 Go 语言开发的身份验证代理,为 Web 应用提供了企业级的安全保护,同时保持了部署和管理的简便性。无论是个人项目还是企业应用,Authelia 都能提供灵活、可靠的身份验证解决方案。其活跃的社区和持续的开发确保了项目的安全性和现代性,使其成为保护 Web 应用的优秀选择。
通过合理的配置和集成,Authelia 可以无缝地融入现有的基础设施,为用户和应用提供强大的安全防护,同时保持优秀的用户体验。
authelia_20260204145139.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载




还没有评论,来说两句吧...