pub mod core; pub mod jwt; pub mod oauth; pub mod oidc; pub mod security;
pub mod token_exchange;
pub use core::{
additional_modules::{
api_gateway, consent, device_flow_server, introspection, jwt_server, saml_idp,
},
client_registration::{
ClientRegistrationConfig, ClientRegistrationManager, ClientRegistrationRequest,
ClientRegistrationResponse, RegisteredClient,
},
client_registry::ClientRegistry,
federated_authentication_orchestration::{
AlternativeIdp, AppliedTransformation, AttributeMappingConfig, AttributeTransformation,
AuthenticationProtocol, CircuitBreakerConfig, CircuitBreakerState, FederationOrchestrator,
FederationOrchestratorConfig, FederationOrchestratorImpl, IdentityProvider, IdpCapability,
IdpHealthMetrics, IdpRecommendation, IdpRoutingRule, IdpSessionInfo, OrchestrationMetadata,
OrchestrationPattern, OrchestrationPreferences, OrchestrationRequest,
OrchestrationResponse, OrchestrationSessionInfo, ProtocolTranslationConfig,
SelectedIdpInfo, SessionFederationConfig, SessionProtocol, StringOperation, TimeConstraint,
TrustLevel, TrustValidationConfig,
},
metadata::MetadataProvider,
stepped_up_auth::{
AuthenticationLevel, AuthenticationMethod, LocationInfo, StepUpConfig, StepUpContext,
StepUpEvaluationResult, StepUpRequest, StepUpResponse, StepUpRule, StepUpStatus,
StepUpTrigger, SteppedUpAuthManager,
},
};
pub use oauth::{
device::{
DeviceAuthManager, DeviceAuthorizationRequest, DeviceAuthorizationResponse,
DeviceAuthorizationStatus, DeviceTokenRequest, StoredDeviceAuthorization,
},
oauth2::OAuth2Server,
oauth21::OAuth21Server,
par::PARManager,
rich_authorization_requests::{
AuthorizationDetail, RarAuthorizationDecision, RarAuthorizationProcessor,
RarAuthorizationRequest, RarCondition, RarConfig, RarDecisionType, RarDetailDecision,
RarManager, RarPermissionGrant, RarResourceAccess, RarResourceDiscoveryRequest,
RarResourceDiscoveryResponse, RarRestriction, RarValidationResult,
},
};
pub use oidc::{
core::OidcProvider,
oidc_advanced_jarm::{
AdvancedJarmConfig, AdvancedJarmManager, AuthorizationResponse, DeliveryResult,
JarmDeliveryMode, JarmResponse, JarmValidationResult,
},
oidc_backchannel_logout::{
BackChannelLogoutConfig, BackChannelLogoutManager, BackChannelLogoutRequest,
BackChannelLogoutResponse, LogoutEvents, LogoutTokenClaims, NotificationResult,
RpBackChannelConfig,
},
oidc_enhanced_ciba::{
AuthenticationContext, AuthenticationMode, CibaDeviceInfo, CibaRequestStatus,
CibaTokenResponse, ConsentInfo, ConsentStatus, DeviceBinding, EnhancedCibaAuthRequest,
EnhancedCibaAuthResponse, EnhancedCibaConfig, EnhancedCibaManager, GeoLocation,
UserIdentifierHint,
},
oidc_error_extensions::{
AuthenticationRequirements, OidcErrorCode, OidcErrorManager, OidcErrorResponse,
},
oidc_extensions::OidcExtensionsManager,
oidc_frontchannel_logout::{
FailedNotification, FrontChannelLogoutConfig, FrontChannelLogoutManager,
FrontChannelLogoutRequest, FrontChannelLogoutResponse, RpFrontChannelConfig,
},
oidc_response_modes::{
FormPostResponseMode, JarmResponseMode, MultipleResponseTypesManager, ResponseMode,
},
oidc_rp_initiated_logout::{
ClientLogoutConfig, LogoutNotificationTarget, RpInitiatedLogoutConfig,
RpInitiatedLogoutManager, RpInitiatedLogoutRequest, RpInitiatedLogoutResponse,
},
oidc_session_management::{
OidcSession, OidcSessionState, SessionCheckRequest, SessionCheckResponse, SessionManager,
},
oidc_user_registration::{
RegistrationData, RegistrationManager, RegistrationRequest, RegistrationResponse,
},
};
pub use jwt::{
jwt_access_tokens::{JwtAccessTokenBuilder, JwtAccessTokenValidator},
jwt_best_practices::{
CryptoStrength, JwtBestPracticesConfig, JwtBestPracticesValidator, SecureJwtClaims,
SecurityLevel,
},
jwt_introspection::{
BasicIntrospectionResponse, JwtIntrospectionClaims, JwtIntrospectionConfig,
JwtIntrospectionManager,
},
private_key_jwt::PrivateKeyJwtManager,
};
pub use token_exchange::{
advanced_token_exchange::{AdvancedTokenExchangeConfig, AdvancedTokenExchangeManager},
core::TokenExchangeManager,
token_exchange_common::{
ExchangeRequirements, ServiceComplexityLevel, TokenExchangeCapabilities,
TokenExchangeFactory, TokenExchangeService, TokenExchangeUseCase, TokenValidationResult,
ValidationUtils,
},
token_exchange_factory::{PerformanceCharacteristics, SetupGuide, TokenExchangeManagerFactory},
token_introspection::{TokenIntrospectionHandler, TokenIntrospectionService},
};
pub use security::{
caep_continuous_access::{
CaepAccessDecision, CaepConfig, CaepDeviceInfo, CaepEvaluationResult, CaepEvaluationRule,
CaepEvent, CaepEventHandler, CaepEventSeverity, CaepEventSource, CaepEventType,
CaepLocationInfo, CaepManager, CaepRuleAction, CaepRuleCondition, CaepSessionState,
},
dpop::DpopManager,
fapi::FapiManager,
mtls::MutualTlsManager,
x509_signing::X509CertificateManager,
};
use crate::errors::Result;
use crate::permissions::Permission;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::SystemTime;
pub use crate::client::ClientType;
#[derive(Debug, Clone, Default)]
pub struct WorkingServerConfig {
}
#[async_trait]
pub trait AuthenticationProvider {
fn name(&self) -> &str;
async fn initialize(&self) -> Result<()>;
async fn handle_auth_request(&self, request: AuthRequest) -> Result<AuthResponse>;
async fn validate_credentials(&self, credentials: &str) -> Result<ValidationResult>;
async fn get_metadata(&self) -> Result<ProviderMetadata>;
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthRequest {
pub request_type: String,
pub parameters: HashMap<String, String>,
pub client_id: Option<String>,
pub user_id: Option<String>,
pub timestamp: SystemTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthResponse {
pub response_type: String,
pub data: HashMap<String, serde_json::Value>,
pub success: bool,
pub error: Option<String>,
pub timestamp: SystemTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationResult {
pub valid: bool,
pub user_id: Option<String>,
pub client_id: Option<String>,
pub scopes: Vec<String>,
pub permissions: Vec<Permission>,
pub expires_at: Option<SystemTime>,
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderMetadata {
pub name: String,
pub endpoints: HashMap<String, String>,
pub grant_types: Vec<String>,
pub response_types: Vec<String>,
pub scopes: Vec<String>,
pub additional: HashMap<String, serde_json::Value>,
}