| Crates.io | kotoba-security |
| lib.rs | kotoba-security |
| version | 0.1.21 |
| created_at | 2025-09-16 16:10:19.548167+00 |
| updated_at | 2025-09-19 16:28:13.435492+00 |
| description | Comprehensive authentication and authorization system with JWT, OAuth2, MFA |
| homepage | https://github.com/com-junkawasaki/kotoba |
| repository | https://github.com/com-junkawasaki/kotoba |
| max_upload_size | |
| id | 1841986 |
| size | 339,368 |
Comprehensive authentication and authorization system for the Kotoba graph database. Implements enterprise-grade security with JWT, OAuth2, MFA, and capability-based access control.
Kotoba Security serves as the complete security foundation for the Kotoba ecosystem, providing:
// Unified security service combining all components
pub struct SecurityService {
jwt: JwtService,
oauth2: Option<OAuth2Service>,
mfa: MfaService,
password: PasswordService,
session: SessionManager,
capabilities: CapabilityService,
}
jwt.rs)// Standards-compliant JWT token management
pub struct JwtService {
encoding_key: EncodingKey,
decoding_key: DecodingKey,
access_token_expiry: Duration,
refresh_token_expiry: Duration,
}
impl JwtService {
pub fn generate_token_pair(&self, user_id: &str, roles: Vec<String>) -> Result<TokenPair>;
pub fn validate_token(&self, token: &str) -> Result<JwtClaims>;
pub fn refresh_access_token(&self, refresh_token: &str) -> Result<TokenPair>;
}
oauth2.rs)// Full OAuth2/OpenID Connect implementation
pub struct OAuth2Service {
clients: HashMap<OAuth2Provider, BasicClient>,
redirect_url: Url,
}
impl OAuth2Service {
pub async fn new(config: OAuth2Config) -> Result<Self>;
pub async fn get_authorization_url(&self, provider: OAuth2Provider) -> Result<String>;
pub async fn exchange_code(&self, provider: OAuth2Provider, code: &str) -> Result<OAuth2Tokens>;
}
capabilities.rs)// Fine-grained, object-capability security
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Capability {
pub resource_type: ResourceType,
pub action: Action,
pub scope: Option<String>,
}
pub struct CapabilityService;
impl CapabilityService {
pub fn check_capability(&self, caps: &CapabilitySet, resource: &ResourceType, action: &Action, scope: Option<&str>) -> bool;
pub fn grant_capabilities(&self, existing: &CapabilitySet, new_caps: Vec<Capability>) -> CapabilitySet;
}
| Metric | Status |
|---|---|
| Compilation | โ Clean (with external dependencies) |
| Tests | โ Comprehensive security test suite |
| Documentation | โ Complete API docs |
| Security | โ Cryptographic best practices |
| Standards | โ JWT, OAuth2, TOTP compliance |
| Performance | โ Optimized for low-latency auth |
use kotoba_security::{SecurityService, SecurityConfig, AuthMethod};
use kotoba_security::config::{JwtConfig, OAuth2Config, SessionConfig};
// Configure security components
let security_config = SecurityConfig {
auth_methods: vec![AuthMethod::Jwt, AuthMethod::OAuth2, AuthMethod::Local],
jwt_config: JwtConfig {
algorithm: "HS256".to_string(),
secret: "your-256-bit-secret".to_string(),
access_token_expiry_secs: 3600, // 1 hour
refresh_token_expiry_secs: 86400, // 24 hours
},
oauth2_config: Some(OAuth2Config {
google: Some(OAuth2ProviderConfig {
client_id: "your-google-client-id".to_string(),
client_secret: "your-google-client-secret".to_string(),
redirect_url: "https://yourapp.com/auth/google/callback".to_string(),
}),
github: None,
microsoft: None,
}),
session_config: SessionConfig::default(),
capability_config: Default::default(),
};
// Initialize security service
let security = SecurityService::new(security_config).await?;
// Generate tokens for authenticated user
let token_pair = security.generate_tokens("user123", vec!["user".to_string(), "admin".to_string()])?;
// Validate incoming requests
let claims = security.validate_token(&token_pair.access_token)?;
println!("User ID: {}", claims.sub);
// Refresh expired access tokens
let new_tokens = security.refresh_token(&token_pair.refresh_token)?;
// Start OAuth2 flow
let auth_url = security.start_oauth2_flow(OAuth2Provider::Google)?;
// Redirect user to auth_url...
// Complete OAuth2 flow with callback
let auth_result = security.complete_oauth2_flow(
OAuth2Provider::Google,
&authorization_code,
&state
).await?;
// Setup MFA for user
let (secret, qr_code_url) = security.setup_mfa("user123")?;
// Display QR code to user for authenticator app setup...
// Verify MFA codes
let is_valid = security.verify_mfa(&secret, "123456")?;
if is_valid {
// Complete authentication
let token_pair = security.generate_tokens("user123", vec!["user".to_string()])?;
}
use kotoba_security::{Principal, Resource, ResourceType, Action};
// Create principal with capabilities
let principal = security.create_principal_with_capabilities(
"user123".to_string(),
CapabilitySet::from(vec![
Capability {
resource_type: ResourceType::Graph,
action: Action::Read,
scope: Some("project:123".to_string()),
},
Capability {
resource_type: ResourceType::Query,
action: Action::Execute,
scope: None,
},
]),
vec!["user".to_string()],
vec![],
HashMap::new(),
);
// Check authorization for resource access
let resource = security.create_resource(
ResourceType::Graph,
Action::Read,
Some("project:123".to_string()),
HashMap::new(),
);
let auth_result = security.check_authorization(&principal, &resource);
assert!(auth_result.allowed);
// Hash passwords securely
let password_hash = security.hash_password("user_password_123")?;
// Verify passwords
let is_valid = security.verify_password("user_password_123", &password_hash)?;
assert!(is_valid);
Kotoba Security is the security foundation for:
| Crate | Purpose | Integration |
|---|---|---|
kotoba-server |
Required | HTTP middleware and API auth |
kotoba-execution |
Required | Query authorization |
kotoba-storage |
Optional | Data access control |
kotoba-graph |
Optional | Graph operation permissions |
cargo test -p kotoba-security
Test Coverage:
SecurityService] - Main security service coordinatorUser] - User identity and profile informationPrincipal] - Security principal for authorizationResource] - Protected resource definitionCapability] - Fine-grained permission unitAuthResult] / [AuthzResult] - Authentication/authorization resultsJwtService] - JWT token managementOAuth2Service] - OAuth2/OpenID Connect integrationMfaService] - Multi-factor authenticationPasswordService] - Secure password handlingSessionManager] - Session lifecycle managementCapabilityService] - Capability-based authorizationSecurityConfig] - Main security configurationJwtConfig] - JWT-specific settingsOAuth2Config] - OAuth2 provider configurationSessionConfig] - Session management settingsSee the main Kotoba repository for contribution guidelines.
Licensed under MIT OR Apache-2.0. See LICENSE for details.