SuperAPI AI 工具集

axum-impl-authorization

安全与审计

查看项目

更新于 10-16 08:50

技能介绍

用途:解决 Axum 应用中的授权问题,即“已认证用户是否被允许访问某路由”,例如保护 /admin 分组、为单个端点加权限门控。授权与认证分离,认证由 axum-impl-auth-jwt 完成并产出已验证的 Claims,授权在其后运行并读取该 Claims。

主要能力:Axum 无内置授权,只提供构建块:FromRequestParts 提取器、from_fn 与 from_fn_with_state 中间件、route_layer 方法。两种机制不可互换:中间件守卫用 from_fn 或 from_fn_with_state 配合 route_layer,保护一组路由,要求写在 router 上;newtype 守卫提取器(如 AdminClaims)实现 FromRequestParts,保护单个 handler,要求写在函数签名中。

核心规则:授权失败始终返回 403 Forbidden,绝不返回 401;守卫始终用 .route_layer(),绝不用 .layer();先注册路由再附加 route_layer;复用 Claims 提取器获取身份,不在守卫内重新验证 token;角色集合可能增长时优先检查权限(如 articles:write)而非粗粒度角色;不要为守卫 newtype 同时实现 FromRequest 和 FromRequestParts。

使用方式:需要应用状态(权限库、策略缓存)时用 from_fn_with_state,并把 state 传两次:state.clone() 给 from_fn_with_state,原 state 给 .with_state()。中间件参数顺序为若干 FromRequestParts 提取器、恰好一个 FromRequest 提取器、最后 Next。newtype 守卫在 axum 0.8 用原生 async fn,在 0.7 需加 #[async_trait]。

适用场景:按角色或权限保护路由分组、单 handler 权限校验、基于权限存储的动态判定。限制:Axum 本身不提供授权实现;版本差异仅影响 newtype 守卫的 FromRequestParts 实现;具体权限存储与策略实现资料未提供。