feat: add auth middleware

This commit is contained in:
2026-04-09 15:31:55 +02:00
parent 5eb8da88f8
commit 05bc471d01
11 changed files with 176 additions and 46 deletions
+54
View File
@@ -0,0 +1,54 @@
use axum::{
extract::Request,
http::{StatusCode},
middleware::Next,
response::Response,
};
use crate::auth::{jwt::validate_token, keycloak::{get_jwks, refresh_jwks}};
pub async fn auth_middleware(
mut request: Request,
next: Next,
) -> Result<Response, StatusCode> {
dbg!("Middleware hit");
let headers = request.headers();
dbg!("Headers extracted");
let auth_header = headers
.get("authorization")
.and_then(|v| v.to_str().ok());
dbg!("Auth header: {:?}", auth_header);
let auth_header = auth_header.ok_or(StatusCode::UNAUTHORIZED)?;
let token = auth_header
.strip_prefix("Bearer ")
.ok_or(StatusCode::UNAUTHORIZED)?;
let jwks = get_jwks().await.map_err(|_| StatusCode::UNAUTHORIZED)?;
match validate_token(token, &jwks) {
Ok(claims) => {
dbg!("Token valid");
request.extensions_mut().insert(claims);
Ok(next.run(request).await)
}
Err(_) => {
let jwks = refresh_jwks().await.map_err(|_| StatusCode::UNAUTHORIZED)?;
match validate_token(token, &jwks) {
Ok(claims) => {
request.extensions_mut().insert(claims);
Ok(next.run(request).await)
}
Err(_) => Err(StatusCode::UNAUTHORIZED),
}
}
}
}