首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Authentik:开源身份认证与访问管理平台

Authentik:开源身份认证与访问管理平台

原创
作者头像
qife122
发布2025-08-01 16:43:21
发布2025-08-01 16:43:21
33500
代码可运行
举报
运行总次数:0
代码可运行

项目标题与描述

Authentik是一个开源的灵活身份提供商(Identity Provider),强调多功能性和可扩展性,支持广泛的认证协议。该项目可作为自托管的身份认证解决方案,替代商业产品如Okta、Auth0、Microsoft Entra ID等。

核心功能包括:

  • 多协议支持
  • 用户生命周期管理
  • 认证流程定制
  • 权限与访问控制
  • 多租户支持

功能特性

  • 多协议认证:支持OAuth2、SAML等多种认证协议
  • 可视化流程设计:通过图形界面设计认证流程
  • 用户自助服务:提供密码重置、账户恢复等功能
  • 细粒度权限控制:基于RBAC的权限管理系统
  • 审计日志:记录所有关键操作事件
  • 多租户支持:可为不同客户提供独立实例
  • 蓝本系统:通过YAML文件定义和部署配置
  • Webfinger发现:支持Webfinger协议的服务发现

安装指南

快速开始(Docker Compose)

推荐使用Docker Compose进行小型/测试部署:

代码语言:bash
复制
wget https://goauthentik.io/docker-compose.yml
docker-compose up -d

Kubernetes部署

对于生产环境,可使用Helm Chart:

代码语言:bash
复制
helm repo add authentik https://charts.goauthentik.io
helm install authentik authentik/authentik

系统要求

  • Docker 20.10+
  • PostgreSQL 12+
  • Redis 6+
  • 2GB+内存

使用说明

基本API调用示例

获取当前系统信息:

代码语言:python
代码运行次数:0
运行
复制
import requests

response = requests.get("https://auth.example.com/api/v3/root/config/")
print(response.json())

用户认证流程

  1. 用户访问受保护应用
  2. 重定向到Authentik登录页面
  3. 完成认证(用户名/密码、MFA等)
  4. 返回应用并授予访问权限

核心API端点

  • /api/v3/core/users/ - 用户管理
  • /api/v3/core/groups/ - 用户组管理
  • /api/v3/providers/ - 认证提供商配置
  • /api/v3/policy/ - 访问策略管理

核心代码

用户模型(简化版)

代码语言:python
代码运行次数:0
运行
复制
class User(AbstractUser, GuardianUserMixin):
    """Custom User model with additional fields"""
    
    uuid = models.UUIDField(default=uuid4, primary_key=True)
    attributes = models.JSONField(default=dict)
    type = models.TextField(choices=UserTypes.choices, default=UserTypes.INTERNAL)
    
    @property
    def serializer(self) -> Serializer:
        from authentik.core.api.users import UserSerializer
        return UserSerializer
    
    def __str__(self):
        return self.username

认证中间件

代码语言:python
代码运行次数:0
运行
复制
class AuthenticationMiddleware(MiddlewareMixin):
    """Middleware to authenticate users via session"""
    
    def process_request(self, request):
        if not hasattr(request, "session"):
            raise ImproperlyConfigured("Session middleware required")
            
        request.user = SimpleLazyObject(lambda: get_user(request))
        request.auser = partial(aget_user, request)

蓝本导入器

代码语言:python
代码运行次数:0
运行
复制
class Importer:
    """Import and apply blueprints"""
    
    def apply(self):
        """Apply all entries in blueprint"""
        for entry in self.blueprint.entries:
            try:
                model = apps.get_model(entry.model)
                obj, created = model.objects.update_or_create(
                    **entry.identifiers,
                    defaults=entry.attrs
                )
                if created:
                    LOGGER.debug("Created object", model=entry.model)
            except Exception as exc:
                raise EntryInvalidError from exc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目标题与描述
  • 功能特性
  • 安装指南
    • 快速开始(Docker Compose)
    • Kubernetes部署
    • 系统要求
  • 使用说明
    • 基本API调用示例
    • 用户认证流程
    • 核心API端点
  • 核心代码
    • 用户模型(简化版)
    • 认证中间件
    • 蓝本导入器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档