增加 JWT 中间件以强化访问控制

为了进一步保护敏感的数据并限制特定端点的访问权限,蝙蝠侠在 Robyn 应用中添加了 JWT 验证中间件。通过中间件,系统可以验证请求的合法性并基于用户角色控制访问。


1. 设置认证中间件

Robyn 提供了一个灵活的 认证处理器 (AuthenticationHandler),可以用于自定义身份验证逻辑。

中间件代码

  1. from robyn.authentication import AuthenticationHandler, BearerGetter, Identity
  2. from robyn import Request
  3. from sqlalchemy.orm import Session
  4. from . import crud
  5. class BasicAuthHandler(AuthenticationHandler):
  6. def authenticate(self, request: Request):
  7. # 从请求中提取 Bearer Token
  8. token = self.token_getter.get_token(request)
  9. try:
  10. # 验证并解码 JWT
  11. payload = crud.decode_access_token(token)
  12. username = payload["sub"] # 从令牌中提取用户名
  13. except Exception:
  14. # 如果验证失败,则返回 None
  15. return None
  16. # 验证用户是否存在
  17. with SessionLocal() as db:
  18. user = crud.get_user_by_username(db, username=username)
  19. # 如果用户存在,返回身份信息
  20. if user:
  21. return Identity(claims={"user": f"{user.username}"})
  22. return None
  23. # 配置应用程序以使用自定义认证中间件
  24. app.configure_authentication(BasicAuthHandler(token_getter=BearerGetter()))

2. 示例端点:获取当前用户信息

在配置了中间件后,添加一个示例端点,用于返回当前登录用户的信息。

获取当前用户的端点

  1. @app.get("/users/me", auth_required=True)
  2. async def get_current_user(request):
  3. # 使用 request.identity 提取身份信息
  4. user = request.identity.claims["user"]
  5. return {"current_user": user}
  • auth_required=True:确保此端点只有经过认证的用户才能访问。
  • request.identity:包含用户的身份信息(例如用户名、角色等)。

3. 增强访问控制:基于角色的访问限制

进一步扩展应用逻辑,通过角色限制访问。例如,仅管理员可以删除犯罪记录。

基于角色的访问限制

  1. @app.delete("/crimes/{crime_id}", auth_required=True)
  2. async def delete_crime(request):
  3. # 提取用户身份
  4. user = request.identity.claims["user"]
  5. # 示例:检查用户是否为管理员
  6. if user != "admin":
  7. return {"error": "Permission denied", "status_code": 403}
  8. crime_id = int(request.path_params.get("crime_id"))
  9. with SessionLocal() as db:
  10. success = crud.delete_crime(db, crime_id=crime_id)
  11. if not success:
  12. return {"error": "Crime not found", "status_code": 404}
  13. return {"message": "Crime deleted successfully"}

通过添加认证中间件和基于角色的访问限制,蝙蝠侠不仅保证了系统的安全性,还使系统能够灵活应对复杂的权限需求。现在,哥谭市警察局可以放心地管理犯罪数据,并专注于打击犯罪。