Documentation
¶
Overview ¶
Package auth provides provider-agnostic HTTP authentication and authorization middleware for the Einherjar framework.
auth absorbs two micro-lib packages:
- httpauth → sub-package authmw (middleware + identity enrichment)
- rbac → sub-package rbac (permission provider implementations)
Types that cross the full dependency graph (Identity, Permission, PermissionMask, PermissionProvider) live in contracts/security, not here. This module provides implementations and middleware, not type definitions.
Sub-packages ¶
[authmw] — HTTP middleware layer. Three functions compose the full auth chain:
- [authmw.SetTokenData] — integration contract called by provider packages (auth-jwt, auth-firebase) after token verification.
- [authmw.EnrichmentMiddleware] — converts uid+claims into a security.Identity and stores it in context. The application provides the [authmw.IdentityEnricher] implementation that loads user data.
- [authmw.AuthzMiddleware] — per-route permission gate. Takes a [security.PermissionProvider] and the required permission for the route.
[rbac] — permission resolution. Three provider implementations satisfy [security.PermissionProvider]:
- [rbac.NewClaimsPermissionProvider] — reads pre-computed bitmasks from JWT claims. Zero DB calls. Single-tenant fast-path.
- [rbac.NewCachedPermissionProvider] — wraps any provider with a TTL cache. Cache keys are automatically scoped by TenantID when present.
- [rbac.NewChainPermissionProvider] — tries providers in order; returns the first non-zero mask. Typical: claims fast-path → cached DB fallback.
Wiring Example ¶
enricher := userservice.NewIdentityEnricher(userRepo)
permissions := rbac.NewChainPermissionProvider(
rbac.NewClaimsPermissionProvider("perms", authmw.GetClaims),
rbac.NewCachedPermissionProvider(dbProvider, valkeyCache, 5*time.Minute),
)
// After provider AuthMiddleware (from auth-jwt or auth-firebase):
srv.Use(authmw.EnrichmentMiddleware(logger, enricher))
// Per-route authorization:
srv.With(authmw.AuthzMiddleware(logger, permissions, "orders", security.Permission(0))).
Get("/orders", ordersHandler)
Multi-tenant ¶
Pass the tenant identifier via a request header:
srv.Use(authmw.EnrichmentMiddleware(logger, enricher, authmw.WithTenantHeader("X-Tenant-ID")))
[authmw.WithTenantHeader] populates [security.Identity.TenantID] from the header. [rbac.NewCachedPermissionProvider] automatically scopes its cache keys by TenantID when non-empty — no additional configuration required.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Module observability.Identifiable = &moduleID{}
Module identifies this package to observability systems. auth is middleware-only — it is not registered with the launcher as a lifecycle component. Register Module manually with any version registry if needed.
Functions ¶
This section is empty.
Types ¶
This section is empty.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package authmw provides provider-agnostic HTTP authentication and authorization middleware for the Einherjar framework.
|
Package authmw provides provider-agnostic HTTP authentication and authorization middleware for the Einherjar framework. |
|
Package rbac provides permission provider implementations for the Einherjar authorization system.
|
Package rbac provides permission provider implementations for the Einherjar authorization system. |