ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Authelia 开源单点登录与多因素认证门户:架构全景、核心特性与反向代理实战部署指南

Authelia 开源单点登录与多因素认证门户:架构全景、核心特性与反向代理实战部署指南 Authelia 开源单点登录与多因素认证门户架构全景、核心特性与反向代理实战部署指南【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia本文以仓库根目录 README.md 为骨架结合 config.template.yml 配置模板、examples/compose下的 Docker Compose 示例以及internal/、cmd/下的 Go 源码实现系统讲解 Authelia 的身份认证与授权架构、OpenID Connect 能力、多因素认证方式、细粒度访问控制模型以及如何在 Traefik、nginx、Caddy 等反向代理后完成从快速体验到生产化部署的完整路径。读完本文你将能够基于当前仓库快速拉起一套带 Web 门户的 SSO/2FA 认证服务并理解其底层授权判定与配置解析的实现原理。Authelia 是什么反向代理旁的认证与授权控制平面Authelia是一个开源的身份认证与授权服务器通过一个 Web 门户为你的应用提供**双因素认证2FA与单点登录SSO能力。它在架构上扮演的是反向代理的伴侣companion角色不直接暴露在公网而是由 nginx、Traefik、Caddy、HAProxy、Envoy、Skipper 等反向代理把请求交给它由它决定允许allow、拒绝deny还是重定向redirect**该请求。用 README.md 的原话概括其安全定位Authelia is not directly exposed on the Internet (your reverse proxies are) however, its still the control plane for your internal security——即代理才是公网入口而 Authelia 是内部安全的控制平面。这一设计决定了它的所有访问控制决策都必须建立在代理可信的前提下因此在集成时通常要求代理开启trustForwardHeader之类的选项下文 compose 示例中可见。从源码看服务的入口位于 cmd/authelia/main.go实际启动逻辑由 internal/commands/root.go 中的NewRootCmd()定义进程启动时会依次执行配置存在性检查、配置加载、日志配置、配置键校验与配置语义校验见PreRunE链随后进入RootRunE加载各 Provider认证、存储、会话、通知、OIDC 等并执行启动检查最后通过service.RunAll(ctx)拉起 HTTP 服务。核心特性全景从 OpenID Certified 到后量子密码学README.md 的 Features summary 列出了 Authelia 的关键能力逐项展开如下。OpenID Connect 1.0 / OAuth 2.0OpenID CertifiedAuthelia 已通过OpenID Certified™认证覆盖 OpenID Connect 协议的Basic OP / Implicit OP / Hybrid OP / Form Post OP / Config OP五类 profile。README 同时坦诚说明该能力在路线图上仍处于 beta 阶段但实现已经非常完整并以此支撑了完整的协议认证。对应的服务端实现位于 internal/oidc/包括 issuer、client policy、claims、discovery、provider 等模块HTTP 层处理位于 internal/handlers/ 下的handler_oauth2_*系列文件authorization、token、introspection、revocation、userinfo、jwks、wellknown、pushed authorization request 等。后量子密码学Post-Quantum Cryptography就绪README 在特性列表中明确列出Post-Quantum Cryptography这一能力。从源码看internal/oidc/mldsa.go 与 internal/oidc/issuer_algorithms_mldsa_test.go 表明仓库已实现基于 ML-DSAModule-Lattice-Based Digital Signature Algorithm的签名算法支持并在 issuer 算法测试中覆盖了 ML-DSA 场景——这意味着 OIDC 令牌签发侧已具备抗量子计算的签名算法接入能力。多因素认证2FA手段README 列出的第二因素方法包括方法说明仓库对应实现安全密钥Security Keys支持 FIDO2 / WebAuthn典型设备如 YubiKeyinternal/webauthn/ internal/handlers/handler_sign_webauthn.go基于时间的一次性密码TOTP兼容主流 Authenticator 应用internal/totp/ internal/handlers/handler_sign_totp.go移动推送通知Mobile Push通过 Duo 的 Partner Auth API 实现internal/duo/ internal/handlers/handler_sign_duo.go此外还支持无密码认证Passwordless Authentication通过 WebAuthn Passkey 直接登录对应配置项webauthn.enable_passkey_login密码重置通过邮箱确认进行身份验证后重置密码identity_validation.reset_password段落负责该流程的 JWT 生命周期访问限制Regulation在短时间内多次认证失败后封禁用户防止暴力破解配置见regulation段落实现见 internal/regulation/regulator.go。细粒度访问控制规则Authelia 的访问控制不是简单的放行/拦截而是支持按以下维度组合匹配的规则引擎子域domain / domain_regex用户 / 用户组subject请求 URIresources 正则请求方法methods与查询参数query——从 internal/authorization/authorizer.go 的GetRuleMatchResults可以看到MatchesMethods、MatchesQuery等判定项网络networks支持 CIDR 或预定义网络名每条规则可独立选择one_factor单因素或two_factor双因素策略对于受 one_factor 策略保护的端点Authelia 还支持HTTP Basic Authentication方便非浏览器客户端如 API、脚本直接携带凭据访问。高可用与存储高可用HA使用远程数据库MySQL/MariaDB/PostgreSQL持久化业务数据使用Redis作为高可用 KV 存储承载会话session.redis段落还支持 Redis Sentinel 哨兵高可用与 TLS 配置。单机轻量场景可使用 SQLitestorage.local与内存会话默认memoryprovider。反向代理兼容性README 明确列出开箱即用的集成对象Traefik通过其 ForwardAuth 中间件开箱即用Caddy通过forward_auth指令LinuxServer SWAG容器提供精选配置Kubernetes兼容 ingress-nginx、Traefik Kubernetes CRD / Ingress、Istio、Envoy Gateway 等多种 Ingress Controller 与 Gateway并提供 beta 状态的Helm Chart安装支持。访问控制模型深入规则如何匹配与判定访问控制是 Authelia 的灵魂功能config.template.yml 的access_control段落给出了完整语义而 internal/authorization/authorizer.go 给出了判定实现。**规则对象rule**由以下键构成domain规则适用的域名或域名集合可用通配符*匹配任意子域如*.example.com含通配符的 YAML 值必须用单引号包裹subject可选形如user:username或group:groupname缺省匹配任意用户policy必选取值bypass、one_factor、two_factor、denyresources可选正则列表匹配一组资源路径缺省匹配任意资源。关键语义README/config 中反复强调规则顺序即优先级——the first policy matching (domain, resource, subject) applies第一条命中的规则生效后续规则不再参与default_policy兜底——若未配置access_controlACL 默认对所有人生效deny即默认拒绝一切配置后未命中任何规则的请求走default_policy默认也是deny规则支持domain_regex正则域名可用命名分组(?PUser...)、(?PGroup...)提取用户/组以及networks引用definitions.network预定义或直接写 CIDR/单 IP。源码层面的判定逻辑非常直观Authorizer.GetRequiredLevel顺序遍历rules一旦rule.IsMatch(subject, object)命中即返回该规则的Policy与HasSubjects遍历完仍未命中则回落到defaultPolicy。NewAuthorizer还会预扫描所有规则只要存在two_factor策略或默认策略为 two_factor或 OIDC 配置要求 MFA就会把mfa标志置位供IsSecondFactorEnabled()查询——这解释了为什么 Authelia 能感知是否需要启用第二因素基础设施。反向代理集成实战以 Traefik ForwardAuth 为例仓库的 examples/compose/lite/compose.yml 是一个可运行的完整示例其 Traefik 集成方式代表了 Authelia 的标准接入姿势services: authelia: image: authelia/authelia volumes: - ./authelia:/config labels: traefik.enable: true traefik.http.routers.authelia.rule: Host(authelia.example.com) traefik.http.routers.authelia.entrypoints: https traefik.http.routers.authelia.tls: true traefik.http.routers.authelia.tls.certresolver: letsencrypt traefik.http.middlewares.authelia.forwardAuth.address: http://authelia:9091/api/authz/forward-auth traefik.http.middlewares.authelia.forwardAuth.trustForwardHeader: true traefik.http.middlewares.authelia.forwardAuth.maxResponseBodySize: 8192 traefik.http.middlewares.authelia.forwardAuth.authResponseHeaders: Remote-User,Remote-Groups,Remote-Name,Remote-Email解读其中的关键点ForwardAuth 地址指向 Authelia 的/api/authz/forward-auth端点——这正是 config.template.ymlserver.endpoints.authz段落中forward-auth实现的默认路径除此之外还提供ext-authz、auth-requestnginx auth_request 风格与legacy等实现对应 internal/handlers/handler_authz_impl_*.go 系列trustForwardHeader: true告知 Traefik 把原始请求头X-Forwarded-* 等透传给 Authelia使后者能基于真实客户端 IP 做网络规则匹配与监管计数authResponseHeaders认证通过后把Remote-User、Remote-Groups、Remote-Name、Remote-Email等用户信息头写回上游请求让后端应用无需再自行解析 SSO 会话受保护的业务服务示例中的secure与public均为traefik/whoami通过traefik.http.routers.name.middlewares: autheliadocker挂载该中间件。快速开始Docker Compose 两种实验场景README 的 Getting Started 章节提供两组docker compose捆绑bundle作为先看到 Authelia 跑起来的起点二者均随镜像自带自签名证书需要按需定制Local本地测试场景适用场景不想关心任何配置、纯本地验证服务器不暴露到公网工作方式域名写入本机 hosts 文件使用自签名证书无需 DNS 与真实证书对应目录examples/compose/local/。Lite轻量上公网场景适用场景服务器将暴露到公网需要配置域名与 DNS工作方式证书通过LetsEncrypt签发示例中即certificatesResolvers.letsencrypt.acme配置HTTP-01 质询Lite 的含义外部依赖最小化——文件型用户存储file SQLite 配置存储。README 特别提醒这种配置下服务无法良好扩展will not scale well适合验证而非生产对应目录examples/compose/lite/其中 compose 由authelia、redis会话、traefik入口与 ForwardAuth以及两个whoami测试服务secure/public组成。部署方式与生产化路径README 列出了 Authelia 的多种安装形态独立服务AURauthelia、APT 仓库、FreeBSD Ports二进制/包静态二进制、.deb包容器Docker、Kubernetes编排通过 Helm Chartbeta结合 Ingress Controller / Ingress 配置完成部署。生产化部署的完整流程裸金属与 Kubernetes 两条路线参见仓库文档站点中的 docs/content/integration/ 目录含各代理集成与 Kubernetes 集成指南。README 同时给出三条生产建议固定版本 tag不要用latest——Its recommended to pin a version tag instead of using thelatesttag升级前阅读 release notes——Authelia 仍在活跃开发中可能引入破坏性变更breaking changesHA 用户必读config 模板在多处标注了statelessness主题如 file 认证后端、SQLite 存储、filesystem 通知、session 等段落提示 Kubernetes/HA 场景需要确保无状态化设计——例如文件型用户数据库不支持多实例横向扩展。配置体系速览基于 config.template.yml 的分段解读仓库根目录的 config.template.yml 是一份 1600 行的全量注释模板默认位置为configuration.yml使用 Docker 时容器默认期望其在/config/configuration.yml默认加载位置可通过环境变量X_AUTHELIA_CONFIG覆盖。模板注释还提醒该模板不会自动随版本更新实际参数以官方文档为准。从 CLI 看internal/commands/root.go 提供了-c/--config标志可传多个配置文件或目录默认configuration.yml、--config.exp.filters过滤器以及access-control、build-info、crypto含hash-password帮助主题、storage、config、debug等子命令启动方式形如authelia -c configuration.yml各配置段落与要点如下server服务端address通用地址语法[scheme://]hostname[:port][/path]scheme 可为tcp/tcp4/tcp6/unix/fd默认端口9091asset_path静态资源覆盖目录disable_healthcheck、tlskey/certificate/client_certificates、headers.csp_template、buffers读写缓冲默认 4096、timeouts读写 6s、空闲 30s、endpointspprof/expvars 开关以及四种 authz 端点的implementation与authn_strategies。log 与 telemetryloglevelinfo/debug/trace、formatjson/text、file_path、keep_stdouttelemetry.metrics独立 Metrics 服务默认地址tcp://:9959/metrics对应 internal/metrics/Prometheus 指标prometheus.go。第二因素与认证方法default_2fa_method新用户与首选方法被禁用时的默认 2FA 方法取值totp、webauthn、mobile_pushtotpissuer、algorithm默认 SHA1、digits6 或 8、period默认 30s、skew、secret_size默认 32最小 20、allowed_algorithms/digits/periods、disable_reuse_security_policywebauthndisable、enable_passkey_login、display_name、attestation_conveyance_preferencenone/indirect/direct、timeout、filteringAAGUID 白/黑名单、禁止可备份导出设备、selection_criteriaattachmentcross-platform/platformdiscoverabilityuser_verification、metadataMDS3 元数据校验validate_trust_anchor、validate_entry、validate_status 等duo_apihostname、integration_key、secret_key可用 secret 注入、enable_self_enrollment。身份校验流程identity_validationreset_passwordjwt_lifespan默认 5 分钟、jwt_algorithmHS256、jwt_secret模板中为示例值a_very_important_secret生产必须替换elevated_session管理凭据等敏感操作需要提权会话code_lifespan、elevation_lifespan、charactersOTP 字符数默认 8、require_second_factor、skip_second_factor。ntp时间同步校验用于保证服务器时间足够准确以校验 TOTPaddress默认udp://time.cloudflare.com:123、version、max_desync默认 3s、disable_startup_check可完全离线运行、disable_failure。definitions可复用定义user_attributes公共表达式语言CEL表达式定义的用户属性对应 internal/expression/ 模块network网络名到 CIDR 列表的映射如internal、VPN供 ACL 的networks引用。authentication_backend认证后端二选一ldap生产推荐address、implementationactivedirectory/freeipa/lldap/custom、timeout、start_tls、tlsserver_name、skip_verify、min/max TLS 版本、mTLS 证书链、pooling、base_dn、additional_users_dn、users_filter、additional_groups_dn、groups_filter、group_search_modefilter/memberof、permit_referrals、user/password、attributesusername/display_name/mail/member_of/group_name 等映射。实现位于 internal/authentication/ldap_user_provider.gofile开发/轻量path用户数据库文件、watch、searchemail 搜索、大小写不敏感、password哈希参数argon2id、scrypt、pbkdf2、sha2crypt、bcrypt 全套可调。实现位于 internal/authentication/file_user_provider.go。两者均受password_change.disable、password_reset.disable/custom_url、refresh_intervalLDAP 组数据刷新间隔可设为disable/0/always控制。password_policy 与 privacy_policypassword_policy.standardmin/max_length、require_uppercase/lowercase/number/special或zxcvbn强度算法min_score默认 3privacy_policyenabled、require_user_acceptance按浏览器要求用户接受隐私政策、policy_url必须为 https 绝对 URL。session会话会话 cookie 标识登录态providers 为memory默认或redissecret会话数据加密密钥仅 Redis/Sentinel 场景使用模板示例值insecure_session_secret必须替换cookies列表每项含name默认 authelia_session、domain、authelia_url必需必须是 https且与 domain 匹配、default_redirection_url、same_sitenone/lax/strict、inactivity默认 5m、expiration默认 1h、remember_me默认 1M设为 -1 可禁用redishost/port 或 unix socket、timeout、max_retries、username/password、database_index、连接池参数、tls、以及high_availabilitySentinelsentinel_name、sentinel_username/password、nodes、route_by_latency/route_randomly。regulation防爆破监管modes如user、max_retries0 表示禁用、find_time窗口期默认 2 分钟、ban_time封禁时长默认 5 分钟。实现见 internal/regulation/regulator.go。storage存储三选一localSQLitepath适合轻量非有状态部署、mysqladdress/database/username/password/timeout/tls、postgres额外支持多实例servers故障转移列表与schema。所有方案共享encryption_key最小 20 字符用于加密库中敏感信息更换时必须通过 CLI 操作数据库。notifier通知二选一filesystemfilename把通知写入文件适合开发或smtpaddress/timeout/username/password/sender/identifier/subject/startup_check_address安全默认强制 TLS、校验 x509 证书可用disable_require_tls放宽——仅限未认证连接。通知用于密码重置、WebAuthn/TOTP 注册等场景实现位于 internal/notification/。identity_providers.oidcOIDC 身份提供方hmac_secret用于签名 OAuth2 令牌授权码、access token、refresh tokenjwks至少一个 JWK 需支持 RS256 算法RSA 密钥最低 2048 位每项含key_id≤7 位字母数字自动生成建议不配置、algorithm、use当前仅sig、keyPEM 私钥。完整配置建议阅读docs/content/configuration/下的 OIDC 文档。安全、社区与开源治理安全策略Authelia 对安全问题非常重视漏洞报告遵循 SECURITY.md 中声明的策略相关安全话题在 docs/content/policies/ 下有专题文档社区渠道README 提供 MatrixSupport/Contributing 房间、Discord、以及团队邮箱teamauthelia.comsecurityauthelia.com仅限安全问题等联系方式为什么开源README 给出的理由——安全应当以近乎零成本惠及所有人且开源可被任何人审计保证产品不会作恶参与贡献见 CONTRIBUTING.md项目遵循 all-contributors 规范任何形式的贡献都受欢迎许可证Authelia 基于Apache 2.0许可全文见 LICENSE。小结Authelia 的定位清晰而聚焦它不替代反向代理而是作为代理背后的认证与授权决策引擎用一套 Web 门户把 2FA、SSO、细粒度 ACL 和 OIDC 提供方能力统一起来。对开发者而言从仓库出发可以非常高效地建立完整认知README 提供能力全景与部署路线config.template.yml 提供逐项参数说明examples/compose/lite/compose.yml 提供可运行的 Traefik ForwardAuth 参考实现而 internal/authorization/authorizer.go、internal/commands/root.go 等源码则让规则如何判定配置如何加载等黑盒变得透明。上手的第一步就是克隆仓库、翻阅examples/compose下的两个 bundle并牢记 README 的忠告生产环境固定版本 tag、升级前读 release notes、为 HA 场景保证无状态化。【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表