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
}
相关推荐
做萤石二次开发的哈哈5 小时前
连锁门店、园区、交通枢纽的视频如何统一汇集?应用模板的接入与分权管理详解
人工智能·物联网·音视频·二次开发·视频监控·蓝海aiot一站式工作台·萤石云开放平台
老金带你玩AI5 小时前
全程拿着手机,我让dot准备了一场AI分享
人工智能
nvd115 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
snhna6 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏6 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
点云-激光雷达-Slam-三维牙齿6 小时前
100,000 Records CSV File - India Traffic Accident Analysis Dataset.7z
人工智能·数据集
TechWayfarer6 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
七十二时9566 小时前
视频掉帧怎么用AI补帧
人工智能
可达智灵6 小时前
信创适配|织灵 Coda Loom 2.0 完成银河麒麟服务器操作系统 V10、V11 适配认证
人工智能·可达智灵
Wx-bishekaifayuan6 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游