use auth_framework::oauth2_server::OAuth2Config;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🏭 Production OAuth 2.0 Server Configuration Examples");
let production_config = create_production_config();
let enterprise_config = create_enterprise_config();
let fapi_config = create_fapi_config();
println!("✅ All production configurations created successfully");
demonstrate_configs(&production_config, &enterprise_config, &fapi_config);
Ok(())
}
fn create_production_config() -> OAuth2Config {
OAuth2Config {
issuer: "https://auth.production.com".to_string(),
authorization_code_lifetime: Duration::from_secs(300), access_token_lifetime: Duration::from_secs(900), refresh_token_lifetime: Duration::from_secs(86400 * 7), device_code_lifetime: Duration::from_secs(600), default_scope: Some("read".to_string()), max_scope_lifetime: Duration::from_secs(86400), require_pkce: true, enable_introspection: true, enable_revocation: true, }
}
fn create_enterprise_config() -> OAuth2Config {
OAuth2Config {
issuer: "https://auth.enterprise.com".to_string(),
authorization_code_lifetime: Duration::from_secs(600), access_token_lifetime: Duration::from_secs(3600), refresh_token_lifetime: Duration::from_secs(86400 * 30), device_code_lifetime: Duration::from_secs(1800), default_scope: Some("read write".to_string()),
max_scope_lifetime: Duration::from_secs(86400 * 90), require_pkce: true,
enable_introspection: true,
enable_revocation: true,
}
}
fn create_fapi_config() -> OAuth2Config {
OAuth2Config {
issuer: "https://auth.bank.com".to_string(),
authorization_code_lifetime: Duration::from_secs(60), access_token_lifetime: Duration::from_secs(300), refresh_token_lifetime: Duration::from_secs(3600), device_code_lifetime: Duration::from_secs(300), default_scope: Some("account_read".to_string()),
max_scope_lifetime: Duration::from_secs(3600), require_pkce: true, enable_introspection: true,
enable_revocation: true,
}
}
fn demonstrate_configs(prod: &OAuth2Config, ent: &OAuth2Config, fapi: &OAuth2Config) {
println!("\n📊 Configuration Comparison:");
println!("\n🔒 Production Configuration:");
println!(" Issuer: {}", prod.issuer);
println!(" Auth Code Lifetime: {:?}", prod.authorization_code_lifetime);
println!(" Access Token Lifetime: {:?}", prod.access_token_lifetime);
println!(" PKCE Required: {}", prod.require_pkce);
println!("\n🏢 Enterprise Configuration:");
println!(" Issuer: {}", ent.issuer);
println!(" Auth Code Lifetime: {:?}", ent.authorization_code_lifetime);
println!(" Access Token Lifetime: {:?}", ent.access_token_lifetime);
println!(" PKCE Required: {}", ent.require_pkce);
println!("\n🏦 FAPI (Banking) Configuration:");
println!(" Issuer: {}", fapi.issuer);
println!(" Auth Code Lifetime: {:?}", fapi.authorization_code_lifetime);
println!(" Access Token Lifetime: {:?}", fapi.access_token_lifetime);
println!(" PKCE Required: {}", fapi.require_pkce);
println!("\n🎯 Production Deployment Examples Complete!");
println!("📋 Key Production Considerations:");
println!(" • Short token lifetimes for better security");
println!(" • PKCE always required");
println!(" • Introspection and revocation enabled");
println!(" • FAPI compliance for financial services");
println!(" • Configurable scopes and lifetimes");
}