1. 引言
在 Python 生态中,身份认证与授权是构建安全应用的核心环节。agentauth-core是一个轻量级但功能强大的认证授权库,专为需要快速集成用户认证、角色管理和权限控制的 Python 项目而设计。本文将全面介绍 agentauth-core 的功能特性、安装方法、核心语法与参数,并通过 8 个实际应用案例展示其用法,最后总结常见错误与使用注意事项。
2. agentauth-core 功能概述
agentauth-core 提供以下核心功能:
- 用户认证:支持用户名/密码、Token、OAuth 等多种认证方式。
- 角色与权限管理:基于角色的访问控制(RBAC),支持细粒度权限定义。
- 会话管理:内置会话创建、验证与销毁机制。
- 密码加密:自动使用 bcrypt 或 Argon2 对密码进行哈希存储。
- Token 签发与验证:支持 JWT(JSON Web Token)和自定义 Token 格式。
- 多后端支持:可对接 SQLite、PostgreSQL、Redis 等存储后端。
- 中间件集成:提供 Flask、Django、FastAPI 等框架的中间件适配。
- 可扩展性:允许自定义认证策略、权限校验器和用户模型。
3. 安装方法
agentauth-core 可通过 pip 直接安装:
pip install agentauth-core如需安装特定版本:
pip install agentauth-core==1.2.0若需要数据库支持(如 PostgreSQL),可安装扩展依赖:
pip install agentauth-core[postgresql]其他可选扩展包括[redis]、[jwt]、[flask]、[django]、[fastapi]等。
4. 核心语法与参数
4.1 初始化认证管理器
from agentauth import AuthManager auth = AuthManager( secret_key="your-secret-key", token_expiry=3600, # Token 过期时间(秒) password_hash="bcrypt", # 密码哈希算法:bcrypt 或 argon2 storage_backend="sqlite", # 存储后端 db_url="sqlite:///users.db" )4.2 用户注册
user = auth.register( username="alice", password="SecurePass123!", email="alice@example.com", roles=["user"] )4.3 用户登录
token = auth.login( username="alice", password="SecurePass123!" ) # 返回 JWT Token 字符串4.4 验证 Token
payload = auth.verify_token(token) # 返回包含用户信息的字典4.5 权限检查
has_perm = auth.check_permission( user_id=1, permission="read:documents" )4.6 角色管理
# 创建角色 auth.create_role("editor", permissions=["create:post", "edit:post"]) 为用户分配角色 auth.assign_role(user_id=1, role="editor")5. 8 个实际应用案例
案例 1:Flask Web 应用用户登录
from flask import Flask, request, jsonify from agentauth import AuthManager app = Flask(name) auth = AuthManager(secret_key="mysecret", storage_backend="sqlite") @app.route("/login", methods=["POST"]) def login(): data = request.json token = auth.login(data["username"], data["password"]) return jsonify({"token": token}) @app.route("/protected") def protected(): token = request.headers.get("Authorization") try: user = auth.verify_token(token) return jsonify({"message": f"Hello {user['username']}"}) except Exception: return jsonify({"error": "Unauthorized"}), 401 if name == "main": app.run()案例 2:FastAPI 集成 JWT 认证
from fastapi import FastAPI, Depends, HTTPException from fastapi.security import HTTPBearer from agentauth import AuthManager app = FastAPI() auth = AuthManager(secret_key="fastapi-secret", token_expiry=7200) security = HTTPBearer() @app.post("/register") def register(username: str, password: str, email: str): user = auth.register(username, password, email) return {"id": user.id, "username": user.username} @app.get("/me") def get_me(token: str = Depends(security)): payload = auth.verify_token(token.credentials) return {"user": payload}案例 3:Django 中间件权限控制
# middleware.py from agentauth import AuthManager from django.http import JsonResponse auth = AuthManager(secret_key="django-secret") class AuthMiddleware: def init(self, get_response): self.get_response = get_response def __call__(self, request): token = request.META.get("HTTP_AUTHORIZATION") if token: try: request.user = auth.verify_token(token) except Exception: return JsonResponse({"error": "Invalid token"}, status=401) return self.get_response(request)</code></pre> 案例 4:基于角色的 API 访问控制 from agentauth import AuthManager auth = AuthManager(secret_key="rbac-secret") 定义角色与权限 auth.create_role("admin", permissions=["*"]) auth.create_role("viewer", permissions=["read:documents"]) auth.create_role("editor", permissions=["read:documents", "write:documents"]) 注册用户并分配角色 user1 = auth.register("admin_user", "AdminPass1!", roles=["admin"]) user2 = auth.register("viewer_user", "ViewPass1!", roles=["viewer"]) 权限校验 def access_document(user_id, action): perm = f"{action}:documents" if auth.check_permission(user_id, perm): return "Access granted" return "Access denied" print(access_document(user1.id, "delete")) # 管理员可删除 print(access_document(user2.id, "delete")) # 查看者无权限 案例 5:Redis 会话缓存 from agentauth import AuthManager auth = AuthManager( secret_key="redis-secret", storage_backend="redis", redis_url="redis://localhost:6379/0", session_ttl=1800 # 会话存活时间 30 分钟 ) 创建会话 session = auth.create_session(user_id=1) print(f"Session ID: {session.id}") 验证会话 valid = auth.validate_session(session.id) print(f"Session valid: {valid}") 案例 6:自定义用户模型 from agentauth import AuthManager, BaseUserModel class CustomUser(BaseUserModel): def init(self, **kwargs): super().init(**kwargs) self.department = kwargs.get("department") self.phone = kwargs.get("phone") auth = AuthManager( secret_key="custom-secret", user_model=CustomUser ) user = auth.register( username="bob", password="BobPass123!", department="Engineering", phone="+1234567890" ) print(f"User department: {user.department}") 案例 7:Token 刷新机制 from agentauth import AuthManager auth = AuthManager( secret_key="refresh-secret", token_expiry=300, # 短时效 Token(5 分钟) refresh_token_expiry=86400 # 刷新 Token(24 小时) ) 登录获取 Token 和刷新 Token token, refresh_token = auth.login_with_refresh("alice", "SecurePass123!") 使用刷新 Token 获取新 Token new_token = auth.refresh_token(refresh_token) print(f"New token: {new_token}") 案例 8:多因子认证(MFA) from agentauth import AuthManager auth = AuthManager(secret_key="mfa-secret") 启用 MFA secret = auth.enable_mfa(user_id=1) print(f"TOTP Secret: {secret}") 验证 MFA 代码 import pyotp totp = pyotp.TOTP(secret) code = totp.now() is_valid = auth.verify_mfa(user_id=1, code=code) print(f"MFA valid: {is_valid}") 6. 常见错误与使用注意事项 6.1 常见错误 Secret Key 泄露:secret_key 是安全核心,切勿硬编码在代码中或提交到版本控制。应使用环境变量或密钥管理服务。 Token 过期未处理:客户端未捕获 TokenExpiredError 异常,导致应用崩溃。建议在中间件中统一处理 Token 过期并引导刷新。 密码哈希算法选择不当:使用过时的 md5 或 sha1 作为密码哈希。agentauth-core 默认使用 bcrypt,推荐保持默认或升级到 Argon2。 存储后端未正确配置:使用 PostgreSQL 或 Redis 时未安装对应扩展依赖,导致连接失败。请按文档安装 [postgresql] 或 [redis] 扩展。 权限字符串格式错误:权限命名不规范(如使用中文或特殊字符),导致匹配失败。建议使用 资源:操作 格式,如 documents:read。 并发注册冲突:高并发下同一用户名重复注册导致唯一约束冲突。建议在注册前先检查用户名是否存在。 6.2 使用注意事项 密钥管理:生产环境中 secret_key 应使用 os.environ.get("AUTH_SECRET_KEY") 从环境变量读取,长度至少 32 字节。 HTTPS 强制:Token 和密码在传输过程中必须使用 HTTPS 加密,防止中间人攻击。 Token 存储安全:前端应将 Token 存储在 HttpOnly Cookie 中,而非 localStorage,以防范 XSS 攻击。 定期轮换密钥:建议定期更换 secret_key,并确保旧 Token 在密钥更换后失效。 日志审计:记录所有认证失败和权限拒绝事件,便于安全审计和异常检测。 性能优化:高并发场景下建议使用 Redis 作为会话缓存,并启用 Token 黑名单机制以支持即时吊销。 版本兼容性:升级 agentauth-core 前请阅读 changelog,注意 API 变更和数据库迁移脚本。 7. 总结 agentauth-core 是一个功能全面、易于集成的 Python 认证授权库,适用于从简单脚本到大型 Web 应用的多种场景。通过本文介绍的功能、安装方法、核心语法和 8 个实战案例,读者可以快速上手并在自己的项目中实现安全的用户认证与权限管理。在实际使用中,请务必关注密钥安全、Token 管理和性能优化等注意事项,以构建健壮可靠的应用系统。《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。