Skip to Content
SPAPS is proprietary hosted SaaS. Paid access required; pre-1.0 contracts may change. Terms and access
ReferenceMiddleware And Auth

Middleware And Auth

SPAPS uses middleware for cross-cutting HTTP behavior and dependencies for request-specific identity decisions. That division matters: middleware shapes every response, while dependencies decide whether a route can proceed with a specific application, user, or role.

Middleware Catalog

MiddlewareLocationResponsibility
ResponseEnvelopeMiddlewaremiddleware/envelope.pyWrap JSON responses in the standard envelope
RateLimitMiddlewaremiddleware/rate_limiting.pyEnforce request limits with memory or Redis-backed stores
SecurityHeadersMiddlewaremiddleware/security_headers.pyAttach security headers to responses
CORSMiddlewarespaps_app.pyEnforce configured browser CORS policy
RequestLoggingMiddlewaremiddleware.pyShared request logging for reusable quickstart apps
SpapsAuthMiddlewareauth/__init__.pyReusable SPAPS auth middleware for consumer services

Dependency Catalog

DependencyLocationResponsibility
get_applicationmiddleware/spaps_deps.pyValidate application API key and publishable-key constraints
get_current_usermiddleware/spaps_deps.pyRequire JWT or local-mode user
get_optional_usermiddleware/spaps_deps.pyReturn a user when present without requiring one
require_admin_usermiddleware/spaps_deps.pyRequire admin user state
require_rolesrbac/__init__.pyBuild FastAPI role dependencies
require_role / require_any_roleapi/dependencies.pyShared API role helpers

Identity Order

Example

from typing import Annotated from fastapi import Depends from spaps_server_quickstart.rbac import require_roles async def admin_report( user: Annotated[object, Depends(require_roles("admin"))], ) -> dict[str, str]: return {"user_id": str(user.id)}

Middleware order changes are high-risk. Re-run route and middleware tests after touching envelope, rate limit, security header, or CORS behavior.

See Also