# Keycloak Session Timeout Fix

## Issue Analysis
Sessions are expiring after 5 minutes instead of the expected 30+ minutes due to Keycloak configuration issues.

## Root Cause
From your Keycloak settings screenshot, there are two critical issues:

### 1. **Refresh Tokens Are Disabled**
- **Current Setting**: "Revoke Refresh Token" is set to **DISABLED** 
- **Problem**: This actually means refresh tokens are disabled (confusing UI naming)
- **Impact**: Users can't extend their sessions automatically

### 2. **Short User-Initiated Action Lifespan**
- **Current Setting**: 5 minutes
- **Problem**: This overrides access token lifespan for certain user actions
- **Impact**: Forces re-authentication after 5 minutes of activity

## Required Keycloak Configuration Changes

### Step 1: Enable Refresh Tokens
In your Keycloak realm settings:
1. Navigate to **Realm Settings → Tokens**
2. Find "Revoke Refresh Token" 
3. Set it to **ENABLED** (this enables refresh tokens)

### Step 2: Increase Token Lifespans
Update these settings in **Realm Settings → Tokens**:
- **Access Token Lifespan**: 30 minutes ✅ (already correct)
- **User-Initiated Action Lifespan**: Change from **5 minutes** to **30 minutes**
- **Client Login Timeout**: Change from **1 minute** to **30 minutes**
- **Access Token Lifespan For Implicit Flow**: Set to **15 minutes**

### Step 3: Verify Client Settings
In **Clients → [Your Client] → Settings**:
- Ensure "Standard Flow Enabled" is **ON**
- Ensure "Direct Access Grants Enabled" is **ON**

## Expected Results After Changes

1. **Sessions will last 30 minutes** of inactivity
2. **Active users will have tokens refreshed automatically** 2 minutes before expiry
3. **No unexpected logouts** during normal use

## Application Status

Your application already has:
- ✅ Token refresh endpoint (`/api/auth/refresh`)
- ✅ Automatic refresh plugin (`plugins/01.auth-refresh.client.ts`)
- ✅ Session caching in authentication middleware
- ✅ Proper token storage and handling

## Testing After Changes

1. Make the Keycloak configuration changes above
2. Clear your browser cookies and cache
3. Log in fresh
4. Verify you can stay logged in for 30+ minutes
5. Check that tokens refresh automatically (look for `[AUTH_REFRESH]` logs in browser console)

## Implementation Priority

**HIGH PRIORITY**: 
1. Enable refresh tokens (Step 1)
2. Increase User-Initiated Action Lifespan to 30 minutes (Step 2)

**MEDIUM PRIORITY**:
3. Update other token lifespans
4. Verify client settings

## Current Workaround

Until you make these Keycloak changes, the authentication middleware has a 30-second cache that reduces the frequency of auth checks, but it won't prevent the underlying 5-minute timeout.

## Next Steps

1. **Immediate**: Update your Keycloak configuration as described above
2. **After changes**: Test thoroughly to ensure 30-minute sessions work
3. **Monitor**: Check browser console logs for any authentication errors

The good news is your application code is already properly set up for longer sessions - it's just the Keycloak configuration that needs adjustment.
