b6f7f73
ZhenYi
refactor: reorganize configuration files and update module paths for improved structure
b6f7f73
use serde::{Deserialize, Serialize};
#[derive(Clone, Deserialize, Serialize)]
pub struct JwtConfig {
/// oauth 的内部 gRPC 面(`auth.internal.v1.*`)。api 与 socket 经此取代旧的
/// 内部 HTTP 入口;未设置时进程无法启动授权客户端。
#[serde(default)]
pub authority_grpc_url: Option<String>,
#[serde(default)]
pub profile_url: Option<String>,
#[serde(default = "default_issuer")]
pub issuer: String,
#[serde(default)]
pub audience: Option<String>,
#[serde(default = "default_leeway_secs")]
pub leeway_secs: i64,
#[serde(default = "default_key_id")]
pub key_id: String,
#[serde(default)]
pub private_key: Option<String>,
#[serde(default)]
pub jwks_url: Option<String>,
#[serde(default)]
pub jwks_sha256: Option<String>,
/// 退休但仍需接受旧令牌的密钥;轮换时把上一把 `private_key` 挪到这里,
/// JWKS 会同时发布两把,避免换钥瞬间全量 401。
#[serde(default)]
pub retired: Vec<JwtRetiredKey>,
}
#[derive(Clone, Deserialize, Serialize)]
pub struct JwtRetiredKey {
pub key_id: String,
pub private_key: String,
}
impl std::fmt::Debug for JwtConfig {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter
.debug_struct("JwtConfig")
.field("authority_grpc_url", &self.authority_grpc_url)
.field("profile_url", &self.profile_url)
.field("issuer", &self.issuer)
.field("audience", &self.audience)
.field("leeway_secs", &self.leeway_secs)
.field("key_id", &self.key_id)
.field(
"private_key",
&self.private_key.as_ref().map(|_| "<redacted>"),
)
.field("jwks_url", &self.jwks_url)
.field("jwks_sha256", &self.jwks_sha256)
.field("retired", &self.retired)
.finish()
}
}
impl std::fmt::Debug for JwtRetiredKey {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter
.debug_struct("JwtRetiredKey")
.field("key_id", &self.key_id)
.field("private_key", &"<redacted>")
.finish()
}
}
fn default_issuer() -> String {
"auth".to_owned()
}
fn default_leeway_secs() -> i64 {
30
}
fn default_key_id() -> String {
"k1".to_owned()
}
impl crate::loader::Section for JwtConfig {
const KEY: &'static str = "jwt";
}