Skip to content

Chapter 3 of 716 min readBy Deepak GuptaUpdated

Adaptive Authentication & Behavioral Biometrics

Every security team faces the same impossible balancing act. Lock things down too tightly, and employees find workarounds: sharing credentials, writing passwords on sticky notes, calling the helpdesk again and again. Loosen the controls, and you wake up to a breach notification. For decades, authentication has been a binary gate. You either pass the check or you don't. That model is broken, and adaptive authentication is how we fix it.

This chapter takes apart the static authentication model and builds up the concepts behind risk-based adaptive authentication. It then shows how behavioral biometrics adds a continuous trust layer, and walks through implementation patterns for enterprise environments. If you are deploying passkeys, or any passwordless technology, adaptive authentication is not optional. It is the intelligence layer that makes everything else work.

The Friction Problem: Security vs. Usability

Static authentication treats every login the same. An employee accessing their email from a company laptop at headquarters at 10 AM gets the same challenge as someone logging in from an unrecognized device in a foreign country at 3 AM. That is not security. It is theater.

The pattern I see repeatedly is a paradox. Over-secured environments do not achieve the best security outcomes, because human behavior undermines the controls. Under-secured environments are easy to use and easy to break into. The illustrative comparison below shows the shape of the trade-off; the values are directional, not survey data.

Dimension (illustrative) Over-secured environment Under-secured environment
Helpdesk load from authentication High Low
Time spent signing in Long Short
Users finding workarounds Common Rare
Account takeover risk Lower, but eroded by workarounds High
Actual security posture Moderate Weak

When you force MFA on every single action, users develop "MFA fatigue." They approve push notifications without looking and leave sessions open indefinitely. CISA warns that attackers exploit exactly this habit through push bombing.

Warning

MFA fatigue is not a theoretical risk. In the 2022 Uber breach, the attacker kept sending MFA requests until a contractor accepted one. Over-triggering MFA trains users to approve without thinking, the exact opposite of what security requires.

What Adaptive Authentication Actually Is

Adaptive authentication, also called risk-based authentication or continuous adaptive trust, adjusts the authentication challenge based on contextual risk signals. Instead of a static policy that says "always require MFA," an adaptive system evaluates the risk of each authentication attempt in real time and responds proportionally.

Low risk? Let the user through with just a passkey tap. Medium risk? Ask for a second factor. High risk? Block the attempt and alert the security team. The key insight is that the vast majority of legitimate authentications are low risk, and treating them as such dramatically improves the user experience without weakening security.

Think of it like airport security. A frequent flyer with TSA PreCheck, traveling on a domestic route they fly weekly, gets expedited screening. A first-time international traveler with a one-way ticket purchased in cash gets additional scrutiny. Both approaches are appropriate to their respective risk levels.

The goal of adaptive authentication is not to eliminate friction. It is to put friction where the risk is.

Risk Signals and Scoring

An adaptive authentication engine is only as good as the signals it consumes. The richer your signal set, the more accurate your risk assessments become. Here are the primary categories of risk signals that enterprise implementations should evaluate.

Signal Categories

Location signals include IP geolocation, GPS coordinates (on mobile), and proximity to known office locations. A login from the company's headquarter city is lower risk than one from a country where the organization has no operations.

Device signals encompass device fingerprinting, OS version, browser version, whether the device is managed or unmanaged, and whether it has been seen before. A recognized, managed device with up-to-date patches is low risk. An unknown device with an outdated browser is higher risk.

Temporal signals examine when the authentication attempt occurs relative to the user's normal patterns. An employee who always works 8 AM to 6 PM attempting to log in at 2 AM is anomalous.

Network signals evaluate the network the user connects from: corporate VPN, known home IP, public Wi-Fi, a Tor exit node, or a VPN service often associated with threat actors.

Behavioral signals look at how the user interacts with the authentication flow: typing speed, mouse movements, and whether the pattern matches historical behavior.

Impossible travel detection is one of the most powerful signals. If a user authenticated from New York at 2:00 PM and someone attempts to authenticate as that user from Singapore at 2:30 PM, the laws of physics make that impossible. That is an automatic high-risk flag.

The Risk Scoring Model

Building an effective risk scoring model requires weighting signals appropriately. Here is my working reference model. Treat the weights as a starting point and tune them against your own data:

Signal Weight Low Risk (0 points) Medium Risk (3-5 points) High Risk (8-10 points)
Device recognition 20% Known, managed device Known but unmanaged Unknown device
Location 18% Office or home location Same country, new city Foreign country, no operations
Impossible travel 15% No conflict Unlikely but possible (fast travel) Physically impossible
Network 12% Corporate network/VPN Residential ISP Tor/anonymizer/flagged VPN
Time of access 10% Within normal hours Slightly outside pattern Far outside pattern (3 AM)
User behavior pattern 10% Matches historical pattern Minor deviations Significant anomaly
Failed attempt history 8% No recent failures 1-2 recent failures 3+ failures in short window
Session context 7% Normal session flow Unusual navigation pattern Automated/scripted behavior

The composite score maps to authentication actions:

  • Score 0-20 (Low Risk): Passkey authentication only, no additional challenge
  • Score 21-50 (Medium Risk): Step-up to a second factor (biometric verification, push notification)
  • Score 51-75 (High Risk): Require strong second factor + notify security team
  • Score 76-100 (Critical Risk): Block authentication, require administrator intervention
Tip

Start with generous thresholds and tighten over time. If you launch with aggressive scoring, you will generate a flood of false positives, frustrate users, and lose organizational trust in the system before it has a chance to prove its value.

Behavioral Biometrics Explained

Behavioral biometrics takes risk assessment beyond contextual signals and into the realm of how a person interacts with their device. Unlike physical biometrics (fingerprints, face scans), behavioral biometrics analyze patterns that are distinctive to an individual and hard to steal or replicate.

Key Behavioral Modalities

Keystroke dynamics measure the timing between key presses (flight time), how long each key is held (dwell time), and the patterns of common key combinations. Most people have a recognizable typing rhythm. Academic studies report high accuracy for keystroke dynamics in controlled settings, but results vary widely with data quality and population, so treat it as one signal among several.

Mouse movement patterns capture velocity, acceleration, curvature, and click patterns. Humans do not move a mouse in straight lines. We follow characteristic curves that are fairly consistent for each person and differ between people.

Touchscreen interaction on mobile devices adds pressure sensitivity, swipe velocity, finger angle, and multi-touch coordination patterns. These signals are particularly rich because smartphone sensors provide high-resolution data.

Gait analysis uses accelerometer and gyroscope data from smartphones to identify users by how they walk. While primarily useful as a continuous authentication signal rather than a login-time signal, gait analysis can maintain a trust level throughout a session when the device is being carried.

How It Works Technically

The behavioral biometrics pipeline follows a well-established pattern:

[Continuous Data Collection] → [Feature Extraction] → [ML Model Inference] → [Risk Score]
        ↓                            ↓                        ↓                    ↓
  Raw sensor events          Statistical features      Trained classifier     0.0 to 1.0 score
  (timestamps, coords,      (mean, std dev,            (typically ensemble    integrated into
   pressure, velocity)       frequency domain)          or neural network)    risk engine

Step 1, data collection: JavaScript SDKs or native mobile libraries capture raw interaction events. On web applications, this means keydown/keyup timestamps, mousemove coordinates, and scroll events. On mobile, it includes touch events plus sensor data from accelerometers and gyroscopes.

Step 2, feature extraction: Raw events are transformed into meaningful features. For keystroke dynamics, this might produce a vector of 50-200 features: average dwell time per key, average flight time between common digraphs, typing speed variance, error rate, and backspace frequency. For mouse dynamics, features include average velocity, curvature distribution, click precision, and pause patterns.

Step 3, model inference: The feature vector is compared against a user-specific behavioral profile. Most production systems use ensemble models (random forests, gradient boosted trees) for their balance of accuracy and interpretability. Some vendors use recurrent neural networks or autoencoders for anomaly detection. The model outputs a confidence score between 0.0 (definitely not this user) and 1.0 (definitely this user).

Step 4, risk score integration: The behavioral confidence score becomes one more input into the overall adaptive risk engine, weighted alongside device, location, and temporal signals.

Note

As a rule of thumb, plan for several sessions of interaction data before a behavioral profile is reliable. During that period, run the system in "learning mode" and never make blocking decisions on behavioral signals alone. Ask your vendor for its own warm-up figures and test them.

Privacy-Preserving Approaches

Behavioral biometrics raises legitimate privacy concerns. Users rightly want to know: are you watching everything I type? Responsible implementations address this head-on with architectural choices that protect privacy by design.

On-device processing keeps raw behavioral data on the user's device. Feature extraction and initial model inference happen locally, and only the resulting risk score (a single number) is transmitted to the server. Apple's approach with on-device machine learning in iOS provides a model for this pattern.

Behavioral hashing transforms behavioral features into irreversible hashed representations before transmission. Similar to how you would never store a password in plaintext, behavioral templates should be stored as mathematical representations that cannot be reversed to reconstruct the original behavior patterns.

No raw biometric storage is a non-negotiable requirement. Your system should never store raw keystroke logs, mouse movement recordings, or sensor data beyond the brief window needed for feature extraction. Retention policies should be aggressive: process and discard.

Transparency and consent matter enormously. Users should know that behavioral analysis is occurring, understand what data is collected, and have the ability to opt out (with the understanding that opting out may require alternative verification methods).

Step-Up Authentication Triggers

Not every risk signal warrants the same response. Step-up authentication, which prompts for more verification mid-session, should be triggered by specific events tied to how sensitive the action is.

Trigger Event Recommended Step-Up Rationale
Accessing financial data or initiating transfer Strong biometric + confirmation Financial actions are irreversible
Changing account security settings Re-authentication with passkey Prevents attacker persistence
Accessing PII/PHI records outside normal scope Manager approval + re-authentication Regulatory requirement and anomaly
First access from new device Device registration + second factor Establishes device trust
Behavioral anomaly score exceeds threshold Transparent challenge (e.g., CAPTCHA) Catches session hijacking
Impossible travel detected mid-session Full re-authentication + security alert Strong indicator of compromise
Elevated privilege operation (admin actions) Hardware security key or passkey Protects crown jewels

Implementation Patterns

The three patterns below are illustrative composites of designs I have seen work. They are not reports from named organizations, and the numbers in them are design parameters, not results.

Banking: High-Risk Transaction Triggers

A retail bank evaluates dozens of risk signals per sign-in. For routine account viewing, a passkey alone is enough. Wire transfers above a set threshold trigger biometric re-verification plus a short confirmation delay. Sessions with a behavioral anomaly trigger a callback from the fraud team before any transaction can proceed.

The design insight is organizational as much as technical. Reducing friction for the large majority of normal interactions is what earns the internal support to increase friction for the small share of risky ones.

SaaS: Unusual Location Triggers

A SaaS company applies location-aware adaptive authentication to its admin console. An administrator signing in from a recognized location and device gets the full admin panel with a passkey alone. The same admin signing in from a new city gets read-only access until they complete step-up verification. Sign-ins from countries on the company's restricted list are blocked, and the security team gets an email.

Healthcare: Sensitive Record Access

A hospital network uses behavioral signals as a continuous trust layer. Clinicians sign in with passkeys at the start of a shift, and the engine monitors interaction patterns passively. Opening patient records outside the clinician's own department, a common insider-threat pattern, requires re-authentication. If the behavioral profile deviates sharply, which suggests someone else is using an unlocked workstation, the session is suspended.

Integration with Passkeys

Passkeys provide strong authentication at the front door. Adaptive authentication and behavioral biometrics provide continuous verification throughout the session. Together, they create a layered defense that is both more secure and more user-friendly than traditional MFA.

The integration model works like this:

  1. Initial authentication: User authenticates with a passkey (FIDO2/WebAuthn). The adaptive engine evaluates contextual signals and assigns a baseline risk score.
  2. Session establishment: If the risk score is low, the session is established with full privileges. If medium, limited privileges are granted until step-up is completed.
  3. Continuous monitoring: Behavioral biometrics runs throughout the session, continuously validating that the person using the device matches the person who authenticated.
  4. Event-driven step-up: Specific high-sensitivity actions trigger additional verification, calibrated by the current behavioral confidence score.

In this model, a legitimate user on their normal device, in their normal location, may go a whole workday without an extra prompt. An attacker who somehow got hold of that user's unlocked device should be flagged quickly by behavioral anomalies.

Practical Code Example: A Simple Risk Scoring Engine

Below is a simplified risk scoring engine that demonstrates the core concept. Production implementations will be more sophisticated, but this captures the architectural pattern.

from dataclasses import dataclass
from enum import Enum
from typing import Optional
import math

class RiskLevel(Enum):
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"

@dataclass
class AuthContext:
    user_id: str
    device_fingerprint: str
    ip_address: str
    latitude: float
    longitude: float
    timestamp: float  # Unix timestamp
    user_agent: str
    is_managed_device: bool
    is_tor_exit: bool
    failed_attempts_last_hour: int

class AdaptiveRiskEngine:
    def __init__(self, user_profile_store, geo_service):
        self.profiles = user_profile_store
        self.geo = geo_service

    def score(self, ctx: AuthContext) -> tuple[float, RiskLevel]:
        signals = {}

        # Device recognition (weight: 20%)
        known_devices = self.profiles.get_known_devices(ctx.user_id)
        if ctx.device_fingerprint in known_devices and ctx.is_managed_device:
            signals['device'] = 0
        elif ctx.device_fingerprint in known_devices:
            signals['device'] = 4
        else:
            signals['device'] = 9

        # Location analysis (weight: 18%)
        home = self.profiles.get_home_location(ctx.user_id)
        distance_km = self._haversine(
            home.lat, home.lon, ctx.latitude, ctx.longitude
        )
        if distance_km < 50:
            signals['location'] = 0
        elif distance_km < 500:
            signals['location'] = 4
        else:
            signals['location'] = 8

        # Impossible travel (weight: 15%)
        last_auth = self.profiles.get_last_auth(ctx.user_id)
        if last_auth:
            travel_distance = self._haversine(
                last_auth.latitude, last_auth.longitude,
                ctx.latitude, ctx.longitude
            )
            time_diff_hours = (ctx.timestamp - last_auth.timestamp) / 3600
            max_possible_km = time_diff_hours * 900  # ~jet speed
            if travel_distance > max_possible_km and time_diff_hours < 24:
                signals['impossible_travel'] = 10
            else:
                signals['impossible_travel'] = 0
        else:
            signals['impossible_travel'] = 0

        # Network (weight: 12%)
        if ctx.is_tor_exit:
            signals['network'] = 10
        else:
            signals['network'] = 0

        # Failed attempts (weight: 8%)
        if ctx.failed_attempts_last_hour >= 3:
            signals['failed_attempts'] = 9
        elif ctx.failed_attempts_last_hour >= 1:
            signals['failed_attempts'] = 4
        else:
            signals['failed_attempts'] = 0

        # Weighted composite score
        weights = {
            'device': 0.20, 'location': 0.18,
            'impossible_travel': 0.15, 'network': 0.12,
            'failed_attempts': 0.08
        }
        composite = sum(
            signals[k] * weights[k] * 10 for k in weights
        )

        # Map to risk level
        if composite <= 20:
            level = RiskLevel.LOW
        elif composite <= 50:
            level = RiskLevel.MEDIUM
        elif composite <= 75:
            level = RiskLevel.HIGH
        else:
            level = RiskLevel.CRITICAL

        return composite, level

    @staticmethod
    def _haversine(lat1, lon1, lat2, lon2):
        R = 6371  # Earth radius in km
        dlat = math.radians(lat2 - lat1)
        dlon = math.radians(lon2 - lon1)
        a = (math.sin(dlat/2)**2 +
             math.cos(math.radians(lat1)) *
             math.cos(math.radians(lat2)) *
             math.sin(dlon/2)**2)
        return R * 2 * math.asin(math.sqrt(a))

This engine evaluates five signal categories, weights them, and produces a composite risk score that maps to an action level. In production, you would add behavioral biometrics scores, time-of-day analysis, session context, and integrate with your policy engine for automated step-up decisions.

Common Mistakes

Over-triggering MFA. If more than 10% of legitimate authentications trigger a step-up challenge in the first month, your thresholds are too aggressive. You will create the exact MFA fatigue you are trying to eliminate. Start permissive, analyze the data, and tighten gradually.

Under-triggering. Conversely, if your adaptive engine never triggers a challenge, it is not providing value. My working target is a 3% to 8% step-up rate for a typical enterprise user population. If you are below that, your risk model is likely missing signals.

Ignoring accessibility. Behavioral biometrics models trained on able-bodied users will flag users with motor disabilities, tremors, or who use assistive technology. Your model must account for diverse interaction patterns, and your step-up methods must include accessible alternatives (not just "tap your phone screen").

Treating the model as static. User behavior evolves. Someone who gets a new laptop, changes their commute, or starts working different hours will trigger false positives if the model does not adapt. Implement continuous profile updates with a decay function that weights recent behavior more heavily.

Skipping the learning period. Deploying adaptive authentication in enforcement mode on day one, before the system has baseline profiles, guarantees chaos. Budget at least two to four weeks in observation-only mode, and communicate the timeline to stakeholders.

Warning

Never use behavioral biometrics as the sole authentication factor. It is a confidence signal, not an authenticator. A behavioral score of 0.95 means "this is probably the right person." It does not replace the cryptographic proof that passkeys and other authenticators provide.

Bringing It All Together

Adaptive authentication and behavioral biometrics transform passwordless deployment from a binary gate into an intelligent, continuous trust system. The passkey proves that someone possesses the right credential. The adaptive engine evaluates whether the context makes sense. Behavioral biometrics validates that the right human is behind the device. Together, these layers provide security that is simultaneously stronger than passwords-plus-MFA and less disruptive to users.

The organizations that get this right do more than improve their security posture. They change the relationship between their employees and their security infrastructure. Authentication stops being an obstacle and starts being invisible. That is the goal.

For more on the machine learning techniques behind adaptive authentication, including vendor comparison frameworks and deployment architectures, see the complete guide: AI-Powered Adaptive Authentication and Behavioral Biometrics Guide 2026.