首页
/ Cheshire Cat AI 核心框架中的认证机制设计与实现

Cheshire Cat AI 核心框架中的认证机制设计与实现

2025-06-29 14:00:37作者:伍希望

认证机制演进背景

在Cheshire Cat AI核心框架的开发过程中,认证机制的设计经历了多次迭代。最初的设计仅对HTTP端点进行API密钥验证,而WebSocket连接则完全开放。这种设计在安全性方面存在明显缺陷,特别是在生产环境中使用时,可能导致未经授权的访问。

认证机制设计目标

项目团队最终确定了以下设计目标:

  1. 分离HTTP和WebSocket的认证机制
  2. 提供可扩展的认证接口
  3. 保持向后兼容性
  4. 支持多种认证策略

技术实现方案

基础认证类设计

框架实现了一个基础认证类BaseAuth,提供了默认的认证逻辑:

class BaseAuth():
    def is_master_key(self, request):
        # 使用环境变量中的API_KEY进行验证
        return request.header["access_token"] == getenv("API_KEY")

    def is_http_allowed(self, request):
        return self.is_master_key(request)

    def is_ws_allowed(self, websocket):
        return True

自定义认证扩展

开发者可以通过继承BaseAuth类来实现自定义认证逻辑:

class MyAuth(BaseAuth):
    def is_master_key(self, request):
        # 可覆盖主密钥验证逻辑
        return False

    def is_http_allowed(self, request):
        # 自定义HTTP认证逻辑
        return custom_http_check(request)

    def is_ws_allowed(self, websocket):
        # 自定义WebSocket认证逻辑
        return custom_ws_check(websocket)

端点保护机制

框架使用依赖注入来保护端点:

@router.get("/protected-endpoint")
def protected_endpoint(request, payload, Depends(http_auth)):
    # 业务逻辑
    pass

认证检查函数http_auth实现了OR逻辑,允许主密钥或自定义认证通过:

def http_auth(app, request):
    cat = app.state.ccat
    if not (cat.auth.is_master_key(request) or cat.auth.is_http_allowed(request)):
        raise HTTPException(status_code=403)

安全最佳实践

  1. 密钥分离:使用不同的环境变量AUTH_KEYWS_AUTH_KEY分别保护HTTP和WebSocket端点
  2. 安全传输:建议在生产环境中启用WSS(WebSocket Secure)而非WS
  3. 权限控制:认证成功后可在工作内存中设置用户权限
  4. 插件扩展:通过插件系统支持OAuth等高级认证方案

技术决策考量

项目团队在设计中考虑了以下因素:

  • 保持现有客户端兼容性
  • 平衡安全性与易用性
  • 提供足够的扩展点
  • 清晰的职责分离

这种认证机制设计既满足了基本安全需求,又为未来的扩展提供了充分的空间,是框架安全架构的重要进步。

登录后查看全文
热门项目推荐
相关项目推荐