Overview
This section explains how Single Sign-On works behind the scenes. Understanding this flow helps both developers implement SSO correctly and end users understand what's happening during login.
🎯 Learning Objectives
After reading this section, you'll understand:
The complete SSO authentication flow
What happens at each step
The role of different components
How tokens work in SSO
Security considerations
🏗️ SSO Architecture Overview
Key Components
1. User's Browser
Where the user interacts with applications
Handles redirects between application and IDP
Stores session cookies (temporarily)
2. Your Application
Frontend: User interface, login buttons
Backend: Handles OAuth flow, stores tokens securely
3. Oten IDP
Identity Provider: Authenticates users
Token Service: Issues and validates tokens
User Store: Manages user accounts and profiles
Detailed Step-by-Step Process
Step 1: User Initiates Login
User Action: Clicks "Login" button
Application: Checks if user is authenticated
Result: User needs to authenticateStep 2: Generate PKCE Parameters
Application: Generates code_verifier (random string)
Application: Creates code_challenge from code_verifier using SHA256
Application: Stores code_verifier for later use
Security: PKCE prevents authorization code interceptionStep 3: Create JAR (JWT-Secured Authorization Request)
Application: Creates authorization parameters:
- response_type: "code"
- client_id: "your_client_id"
- redirect_uri: "https://yourapp.com/callback"
- scope: "openid profile email"
- state: "random_state_string" (CSRF protection)
- nonce: "random_nonce_string"
- code_challenge: generated from step 2
- code_challenge_method: "S256"
Application: Signs parameters as JWT using client_secret (HS256)
Security: JAR ensures request integrity and authenticityStep 4: Redirect to Authorization Endpoint
Application: Creates authorization URL with JAR:
URL: https://account.oten.com/v1/oauth/authorize?client_id=your_client_id&request=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Browser: Redirects user to Oten IDP
Note: Traditional OAuth query parameters are NOT supportedStep 5: User Authenticates at IDP
IDP: Validates JAR signature and parameters
IDP: Shows login form
User: Enters username/password
IDP: Validates credentials
Optional: Two-factor authentication
IDP: User grants consent for requested scopesStep 6: IDP Issues Authorization Code
IDP: Creates temporary authorization code (10-minute expiry)
IDP: Validates redirect_uri matches registered URI
Browser: Redirects back to application with code and state
URL: https://yourapp.com/callback?code=abc123&state=xyz789Step 7: Handle Callback and Validate
Application: Parses callback parameters (code, state, error)
Application: Validates state parameter matches stored value
Application: Checks for authorization errors
Security: State validation prevents CSRF attacksStep 8: Exchange Code for Tokens
Application: Sends POST request to token endpoint:
- grant_type: "authorization_code"
- code: received authorization code
- redirect_uri: must match authorization request
- client_id: application identifier
- code_verifier: PKCE verifier from step 2
- client_secret: for confidential clients
IDP: Validates code, client credentials, and PKCE verifier
IDP: Returns token response:
- access_token: for API calls (1 hour expiry)
- refresh_token: for token renewal (long-lived)
- id_token: user information (JWT format)
- expires_in: token lifetime in secondsStep 9: Store and Use Tokens
Application: Stores tokens securely (sessionStorage for web apps)
Application: Extracts user info from ID token
Application: Uses access token for protected API calls
User: Successfully logged in and can access applicationStep 10: Token Management
Application: Monitors token expiration
Application: Automatically refreshes tokens using refresh_token
Application: Handles token refresh failures (redirect to login)
Application: Provides logout functionality (clears stored tokens)🎫 Understanding Tokens
Authorization Code
Purpose: Temporary code to exchange for tokens
Lifetime: Very short (usually 10 minutes)
Security: Single-use only
Example:
abc123def456ghi789
Access Token
Purpose: Grants access to protected resources
Lifetime: Short (15-60 minutes)
Format: Usually JWT (JSON Web Token)
Usage: Sent with API requests
Refresh Token
Purpose: Obtains new access tokens
Lifetime: Long (days to months)
Security: Stored securely, can be revoked
Usage: Automatic token renewal
ID Token
Purpose: Contains user identity information
Format: JWT with user claims
Contents: User ID, email, name, etc.
Usage: Application knows who the user is
🔐 Security Mechanisms
State Parameter
Purpose: Prevents CSRF attacks
How it works: Random value sent and verified
Implementation: Generated by app, validated on return
PKCE (Proof Key for Code Exchange)
Purpose: Secures public clients (SPAs, mobile)
How it works: Code challenge/verifier pair
Required for: Applications that can't store secrets
Nonce
Purpose: Prevents replay attacks
How it works: Random value in ID token
Usage: OpenID Connect flows
⏱️ Session Management
Session Lifecycle
Login: User authenticates, session created
Active: User accesses applications
Refresh: Tokens renewed automatically
Timeout: Session expires due to inactivity
Logout: User explicitly logs out
Session Duration
Access tokens: 15-60 minutes
Refresh tokens: 7-30 days
ID tokens: Same as access tokens
SSO session: 8-24 hours (configurable)
Cross-Application Sessions
Single logout: Logging out of one app logs out of all
Session sharing: Login to one app grants access to others
Centralized control: IT can revoke access globally
🔍 Monitoring and Observability
What to Monitor
Login success/failure rates
Token refresh patterns
Session duration statistics
Error rates by type
Performance metrics
Logging Best Practices
Log authentication events
Don't log sensitive data (passwords, tokens)
Include correlation IDs
Monitor for suspicious patterns
🚨 Error Scenarios
Common Error Flows
Invalid credentials: User enters wrong password
Expired code: Authorization code takes too long to exchange
Invalid client: Application not properly registered
Access denied: User cancels authentication
Server errors: IDP temporarily unavailable
Error Handling Strategy
User-friendly messages: Don't expose technical details
Retry mechanisms: Handle temporary failures gracefully
Fallback options: Provide alternative authentication methods
Monitoring: Alert on error rate spikes
Next: Dive deeper into the Flow Diagram to see the technical details
Last updated