Authentik是一个开源的灵活身份提供商(Identity Provider),强调多功能性和可扩展性,支持广泛的认证协议。该项目可作为自托管的身份认证解决方案,替代商业产品如Okta、Auth0、Microsoft Entra ID等。
核心功能包括:
推荐使用Docker Compose进行小型/测试部署:
wget https://goauthentik.io/docker-compose.yml
docker-compose up -d
对于生产环境,可使用Helm Chart:
helm repo add authentik https://charts.goauthentik.io
helm install authentik authentik/authentik
获取当前系统信息:
import requests
response = requests.get("https://auth.example.com/api/v3/root/config/")
print(response.json())
/api/v3/core/users/
- 用户管理/api/v3/core/groups/
- 用户组管理/api/v3/providers/
- 认证提供商配置/api/v3/policy/
- 访问策略管理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
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)
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 删除。