fix(middleware): correct order - Auth runs BEFORE RBAC
In Axum, layers are applied bottom-to-top (last added runs first). So Auth middleware must be added AFTER RBAC in the chain to run BEFORE it. Previous order (wrong): RBAC -> Auth -> Handler New order (correct): Auth -> RBAC -> Handler
This commit is contained in:
parent
0bda3ed466
commit
113f44b957
1 changed files with 8 additions and 7 deletions
15
src/main.rs
15
src/main.rs
|
|
@ -500,6 +500,14 @@ async fn run_axum_server(
|
||||||
.layer(rate_limit_extension)
|
.layer(rate_limit_extension)
|
||||||
// Request ID tracking for all requests
|
// Request ID tracking for all requests
|
||||||
.layer(middleware::from_fn(request_id_middleware))
|
.layer(middleware::from_fn(request_id_middleware))
|
||||||
|
// Authentication middleware using provider registry
|
||||||
|
// NOTE: In Axum, layers are applied bottom-to-top, so this runs BEFORE RBAC
|
||||||
|
.layer(middleware::from_fn(move |req: axum::http::Request<axum::body::Body>, next: axum::middleware::Next| {
|
||||||
|
let state = auth_middleware_state.clone();
|
||||||
|
async move {
|
||||||
|
botserver::security::auth_middleware_with_providers(req, next, state).await
|
||||||
|
}
|
||||||
|
}))
|
||||||
// RBAC middleware - checks permissions AFTER authentication
|
// RBAC middleware - checks permissions AFTER authentication
|
||||||
.layer(middleware::from_fn(move |req: axum::http::Request<axum::body::Body>, next: axum::middleware::Next| {
|
.layer(middleware::from_fn(move |req: axum::http::Request<axum::body::Body>, next: axum::middleware::Next| {
|
||||||
let rbac = Arc::clone(&rbac_manager_for_middleware);
|
let rbac = Arc::clone(&rbac_manager_for_middleware);
|
||||||
|
|
@ -507,13 +515,6 @@ async fn run_axum_server(
|
||||||
botserver::security::rbac_middleware_fn(req, next, rbac).await
|
botserver::security::rbac_middleware_fn(req, next, rbac).await
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
// Authentication middleware using provider registry
|
|
||||||
.layer(middleware::from_fn(move |req: axum::http::Request<axum::body::Body>, next: axum::middleware::Next| {
|
|
||||||
let state = auth_middleware_state.clone();
|
|
||||||
async move {
|
|
||||||
botserver::security::auth_middleware_with_providers(req, next, state).await
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
// Panic handler catches panics and returns safe 500 responses
|
// Panic handler catches panics and returns safe 500 responses
|
||||||
.layer(middleware::from_fn(move |req, next| {
|
.layer(middleware::from_fn(move |req, next| {
|
||||||
let config = panic_config.clone();
|
let config = panic_config.clone();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue