1pub mod core; pub mod jwt; pub mod oauth; pub mod oidc; pub mod security;
18pub mod token_exchange; pub use core::{
24 additional_modules::{
25 api_gateway, consent, device_flow_server, introspection, jwt_server, saml_idp,
26 },
27 client_registration::{
28 ClientRegistrationConfig, ClientRegistrationManager, ClientRegistrationRequest,
29 ClientRegistrationResponse, RegisteredClient,
30 },
31 client_registry::ClientRegistry,
32 federated_authentication_orchestration::{
33 AlternativeIdp, AppliedTransformation, AttributeMappingConfig, AttributeTransformation,
34 AuthenticationProtocol, CircuitBreakerConfig, CircuitBreakerState, FederationOrchestrator,
35 FederationOrchestratorConfig, FederationOrchestratorImpl, IdentityProvider, IdpCapability,
36 IdpHealthMetrics, IdpRecommendation, IdpRoutingRule, IdpSessionInfo, OrchestrationMetadata,
37 OrchestrationPattern, OrchestrationPreferences, OrchestrationRequest,
38 OrchestrationResponse, OrchestrationSessionInfo, ProtocolTranslationConfig,
39 SelectedIdpInfo, SessionFederationConfig, SessionProtocol, StringOperation, TimeConstraint,
40 TrustLevel, TrustValidationConfig,
41 },
42 metadata::MetadataProvider,
43 stepped_up_auth::{
44 AuthenticationLevel, AuthenticationMethod, LocationInfo, StepUpConfig, StepUpContext,
45 StepUpEvaluationResult, StepUpRequest, StepUpResponse, StepUpRule, StepUpStatus,
46 StepUpTrigger, SteppedUpAuthManager,
47 },
48};
49
50pub use oauth::{
52 device::{
53 DeviceAuthManager, DeviceAuthorizationRequest, DeviceAuthorizationResponse,
54 DeviceAuthorizationStatus, DeviceTokenRequest, StoredDeviceAuthorization,
55 },
56 oauth2::OAuth2Server,
57 oauth21::OAuth21Server,
58 par::PARManager,
59 rich_authorization_requests::{
60 AuthorizationDetail, RarAuthorizationDecision, RarAuthorizationProcessor,
61 RarAuthorizationRequest, RarCondition, RarConfig, RarDecisionType, RarDetailDecision,
62 RarManager, RarPermissionGrant, RarResourceAccess, RarResourceDiscoveryRequest,
63 RarResourceDiscoveryResponse, RarRestriction, RarValidationResult,
64 },
65};
66
67pub use oidc::{
69 core::OidcProvider,
70 oidc_advanced_jarm::{
71 AdvancedJarmConfig, AdvancedJarmManager, AuthorizationResponse, DeliveryResult,
72 JarmDeliveryMode, JarmResponse, JarmValidationResult,
73 },
74 oidc_backchannel_logout::{
75 BackChannelLogoutConfig, BackChannelLogoutManager, BackChannelLogoutRequest,
76 BackChannelLogoutResponse, LogoutEvents, LogoutTokenClaims, NotificationResult,
77 RpBackChannelConfig,
78 },
79 oidc_enhanced_ciba::{
80 AuthenticationContext, AuthenticationMode, CibaDeviceInfo, CibaRequestStatus,
81 CibaTokenResponse, ConsentInfo, ConsentStatus, DeviceBinding, EnhancedCibaAuthRequest,
82 EnhancedCibaAuthResponse, EnhancedCibaConfig, EnhancedCibaManager, GeoLocation,
83 UserIdentifierHint,
84 },
85 oidc_error_extensions::{
86 AuthenticationRequirements, OidcErrorCode, OidcErrorManager, OidcErrorResponse,
87 },
88 oidc_extensions::OidcExtensionsManager,
89 oidc_frontchannel_logout::{
90 FailedNotification, FrontChannelLogoutConfig, FrontChannelLogoutManager,
91 FrontChannelLogoutRequest, FrontChannelLogoutResponse, RpFrontChannelConfig,
92 },
93 oidc_response_modes::{
94 FormPostResponseMode, JarmResponseMode, MultipleResponseTypesManager, ResponseMode,
95 },
96 oidc_rp_initiated_logout::{
97 ClientLogoutConfig, LogoutNotificationTarget, RpInitiatedLogoutConfig,
98 RpInitiatedLogoutManager, RpInitiatedLogoutRequest, RpInitiatedLogoutResponse,
99 },
100 oidc_session_management::{
101 OidcSession, OidcSessionState, SessionCheckRequest, SessionCheckResponse, SessionManager,
102 },
103 oidc_user_registration::{
104 RegistrationData, RegistrationManager, RegistrationRequest, RegistrationResponse,
105 },
106};
107
108pub use jwt::{
110 jwt_access_tokens::{JwtAccessTokenBuilder, JwtAccessTokenValidator},
111 jwt_best_practices::{
112 CryptoStrength, JwtBestPracticesConfig, JwtBestPracticesValidator, SecureJwtClaims,
113 SecurityLevel,
114 },
115 jwt_introspection::{
116 BasicIntrospectionResponse, JwtIntrospectionClaims, JwtIntrospectionConfig,
117 JwtIntrospectionManager,
118 },
119 private_key_jwt::PrivateKeyJwtManager,
120};
121
122pub use token_exchange::{
124 advanced_token_exchange::{AdvancedTokenExchangeConfig, AdvancedTokenExchangeManager},
125 core::TokenExchangeManager,
126 token_exchange_common::{
127 ExchangeRequirements, ServiceComplexityLevel, TokenExchangeCapabilities,
128 TokenExchangeFactory, TokenExchangeService, TokenExchangeUseCase, TokenValidationResult,
129 ValidationUtils,
130 },
131 token_exchange_factory::{PerformanceCharacteristics, SetupGuide, TokenExchangeManagerFactory},
132 token_introspection::{TokenIntrospectionHandler, TokenIntrospectionService},
133};
134
135pub use security::{
137 caep_continuous_access::{
138 CaepAccessDecision, CaepConfig, CaepDeviceInfo, CaepEvaluationResult, CaepEvaluationRule,
139 CaepEvent, CaepEventHandler, CaepEventSeverity, CaepEventSource, CaepEventType,
140 CaepLocationInfo, CaepManager, CaepRuleAction, CaepRuleCondition, CaepSessionState,
141 },
142 dpop::DpopManager,
143 fapi::FapiManager,
144 mtls::MutualTlsManager,
145 x509_signing::X509CertificateManager,
146};
147
148use crate::errors::Result;
149use crate::permissions::Permission;
150use async_trait::async_trait;
151use serde::{Deserialize, Serialize};
152use std::collections::HashMap;
153use std::time::SystemTime;
154
155pub use crate::client::ClientType;
157
158#[derive(Debug, Clone, Default)]
160pub struct WorkingServerConfig {
161}
162
163#[async_trait]
165pub trait AuthenticationProvider {
166 fn name(&self) -> &str;
168
169 async fn initialize(&self) -> Result<()>;
171
172 async fn handle_auth_request(&self, request: AuthRequest) -> Result<AuthResponse>;
174
175 async fn validate_credentials(&self, credentials: &str) -> Result<ValidationResult>;
177
178 async fn get_metadata(&self) -> Result<ProviderMetadata>;
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
184pub struct AuthRequest {
185 pub request_type: String,
187
188 pub parameters: HashMap<String, String>,
190
191 pub client_id: Option<String>,
193
194 pub user_id: Option<String>,
196
197 pub timestamp: SystemTime,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
203pub struct AuthResponse {
204 pub response_type: String,
206
207 pub data: HashMap<String, serde_json::Value>,
209
210 pub success: bool,
212
213 pub error: Option<String>,
215
216 pub timestamp: SystemTime,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct ValidationResult {
223 pub valid: bool,
225
226 pub user_id: Option<String>,
228
229 pub client_id: Option<String>,
231
232 pub scopes: Vec<String>,
234
235 pub permissions: Vec<Permission>,
237
238 pub expires_at: Option<SystemTime>,
240
241 pub metadata: HashMap<String, serde_json::Value>,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
247pub struct ProviderMetadata {
248 pub name: String,
250
251 pub endpoints: HashMap<String, String>,
253
254 pub grant_types: Vec<String>,
256
257 pub response_types: Vec<String>,
259
260 pub scopes: Vec<String>,
262
263 pub additional: HashMap<String, serde_json::Value>,
265}