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. 克隆项目仓库:

    bash 复制代码
    git clone https://github.com/authelia/authelia.git
    cd authelia
  2. 运行引导脚本以安装依赖:

    bash 复制代码
    ./bootstrap.sh
  3. 构建项目:

    bash 复制代码
    authelia-scripts build
  4. 使用Docker构建镜像:

    bash 复制代码
    authelia-scripts docker build

依赖项

  • 后端:Go模块依赖(详见go.mod
  • 前端:Node.js和pnpm(依赖项在web/package.json中定义)

使用说明

基本配置

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

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服务:

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

API使用

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

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

核心代码

主入口点

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

go 复制代码
package main

import (
	"os"
	"github.com/authelia/authelia/v4/internal/commands"
)

func main() {
	if err := commands.NewRootCmd().Execute(); err != nil {
		os.Exit(1)
	}
}

认证提供者接口

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

go 复制代码
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)
}

访问控制规则

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

go 复制代码
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
}
相关推荐
2501_942389551 分钟前
时钟组件支持自由拖拽缩放
人工智能·散列表·启发式算法·宽度优先·图搜索算法
小马过河R3 分钟前
不只是又一个 Agent 框架:DeepSeek Harness 如何重新定义“可组合”
人工智能·机器学习·系统架构·agent·ai编程·harness
蓝速科技8 分钟前
蓝速科技 3D 全息舱 AI 数字人一体机全尺寸选型实测指南
人工智能·科技·3d
lifallen27 分钟前
DeepSeek Harness:把 Agent 做成可替换的运行时插件树
人工智能·学习·ai·开源软件·ai编程
刀锋000132 分钟前
从0到1手搓生产级 AI Agent:LangGraph 1.2 + LangChain 1.3 保姆级实战(全部代码已跑通)
人工智能·python·langchain·ai agent·langgraph
水如烟32 分钟前
孤能子视角:因果论——方向、锁定与必然感:关系场中归因链的生成语法
人工智能
老兵发新帖37 分钟前
OSD和视频流接口随机出现net::ERR_CONNECTION_RESET问题分析总结
人工智能
海兰40 分钟前
【开源工具】BlueKing Lite —— AI 原生的轻量运维平台(二)
运维·人工智能·开源
自学机械人的小白ing1 小时前
深度学习系统学习
人工智能·深度学习·学习
HyperAI超神经1 小时前
128K长上下文+智能体强化训练!LFM2.5-2.6B解锁端侧大模型高效部署;DETR用Transformer斩断NMS与Anchor,重塑目标检测
人工智能·深度学习·目标检测·计算机视觉·数据集·transformer