namespace Azaion.Common.Configs;
public class JwtConfig
{
public string Issuer { get; set; } = null!;
public string Audience { get; set; } = null!;
///
/// AZ-532 — directory containing ES256 private keys (PEM, *.pem). The kid is
/// the filename without extension. Production: secrets/jwt-keys.
///
public string KeysFolder { get; set; } = "secrets/jwt-keys";
///
/// AZ-532 — kid of the key currently used to SIGN new tokens. Other keys in
/// remain in JWKS for the rotation overlap window so
/// in-flight tokens still verify.
///
public string? ActiveKid { get; set; }
///
/// AZ-531 — access-token TTL in minutes (default 15). Refresh-token TTLs live
/// on .
///
public int AccessTokenLifetimeMinutes { get; set; } = 15;
}
public class SessionConfig
{
///
/// AZ-531 — sliding window. Each refresh extends expires_at by this many
/// hours from "now"; family-level absolute cap below.
///
public int RefreshSlidingHours { get; set; } = 8;
///
/// AZ-531 — absolute cap. A session family older than this many hours since
/// the family's first issue is rejected even if every individual rotation
/// stayed within the sliding window.
///
public int RefreshAbsoluteHours { get; set; } = 12;
}