写点什么

Authelia:开源双因素认证与单点登录解决方案

作者:qife122
  • 2025-08-25
    福建
  • 本文字数:1333 字

    阅读完需:约 4 分钟

Authelia:开源双因素认证与单点登录解决方案

项目标题与描述

Authelia 是一个开源的认证和授权服务器,专注于为应用程序提供双因素认证(2FA)和单点登录(SSO)功能。通过 Web 门户,Authelia 能够作为身份和访问管理(IAM)系统,确保应用程序的安全性。项目支持 OpenID Connect 1.0 协议,并已通过 OpenID 认证,具备广泛的集成能力。

功能特性

  • 双因素认证:支持 TOTP、WebAuthn 等多种双因素认证方式,提升账户安全性。

  • 单点登录:提供统一的登录门户,简化用户访问多个应用的流程。

  • OpenID Connect 提供者:作为认证提供者,支持与第三方应用集成。

  • 灵活的访问控制:基于规则策略,支持按域名、资源、网络等条件进行细粒度授权。

  • 多后端支持:支持 LDAP、文件等多种用户存储后端,适应不同环境需求。

  • 高度可配置:通过 YAML 配置文件,可自定义认证策略、密码策略等。

安装指南

系统要求

  • Linux/FreeBSD 系统(macOS 目前不支持开发工作流)

  • Go 1.18+

  • Node.js 和 pnpm(用于前端构建)

  • Docker 和 Docker Compose(用于容器化部署)

安装步骤

  1. 克隆项目仓库:


   git clone https://github.com/authelia/authelia.git   cd authelia
复制代码


  1. 运行引导脚本以安装依赖:


   ./bootstrap.sh
复制代码


  1. 构建项目:


   authelia-scripts build
复制代码


  1. 使用 Docker 构建镜像:


   authelia-scripts docker build
复制代码

依赖项

  • 后端:Go 模块依赖(详见go.mod

  • 前端:Node.js 和 pnpm(依赖项在web/package.json中定义)

使用说明

基本配置

Authelia 通过 YAML 文件进行配置。以下是一个最小配置示例:


server:  host: 0.0.0.0  port: 9091
authentication_backend: file: path: /config/users_database.yml
access_control: default_policy: deny rules: - domain: "secure.example.com" policy: two_factor
复制代码

启动服务

使用以下命令启动 Authelia 服务:


authelia --config /path/to/configuration.yml
复制代码

API 使用

Authelia 提供 RESTful API 用于集成。例如,检查用户权限:


curl -X POST https://auth.example.com/api/verify \  -H "Content-Type: application/json" \  -d '{"username": "user", "password": "pass"}'
复制代码

核心代码

主入口点

主函数初始化并执行根命令:


package main
import ( "os" "github.com/authelia/authelia/v4/internal/commands")
func main() { if err := commands.NewRootCmd().Execute(); err != nil { os.Exit(1) }}
复制代码

认证提供者接口

定义用户提供者的核心接口:


package authentication
type UserProvider interface { CheckUserPassword(username string, password string) (valid bool, err error) GetDetails(username string) (details *UserDetails, err error) UpdatePassword(username string, newPassword string) (err error) Close() (err error)}
复制代码

访问控制规则

实现基于规则的访问控制逻辑:


package authorization
type AccessControlRule struct { Domains []AccessControlDomain Resources []AccessControlResource Policy Level}
func (acr *AccessControlRule) IsMatch(subject Subject, object Object) (match bool) { if !acr.MatchesDomains(subject, object) { return false } // 其他匹配逻辑... return true}
复制代码


更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Authelia:开源双因素认证与单点登录解决方案_SSO_qife122_InfoQ写作社区