This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
securitycritical PriorityID: webauthn-largeblob-session-storage-standard

WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage

Enforces hardware-bound session bootstrapping via the FIDO2 WebAuthn largeBlob extension. Mandates cryptographic verification, fail-closed authenticator support checks, and strict prohibition of plaintext credential caching in vulnerable storage layers such as localStorage or unencrypted IndexedDB.

Prohibited Anti-Pattern: Falling back to insecure localStorage or plaintext client storage when WebAuthn largeBlob extension operations fail or are unsupported.

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage - Enforces hardware-bound session bootstrapping via the FIDO2 WebAuthn largeBlob extension. Mandates cryptographic verification, fail-closed authenticator support checks, and strict prohibition of plaintext credential caching in vulnerable storage layers such as localStorage or unencrypted IndexedDB.
globs: src/**/*.{ts,tsx}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/webauthn-largeblob-session-storage-standard"
---

# WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage

> **Severity**: CRITICAL | **Category**: security
> **Anti-Pattern Warning**: Falling back to insecure localStorage or plaintext client storage when WebAuthn largeBlob extension operations fail or are unsupported.

## System Constraints
You are a Principal Security Architect enforcing the WebAuthn LargeBlob Extension Deterministic Session Storage Standard. You must mandate hardware-attested, client-side encrypted credential session bootstrapping directly bound to FIDO2 authenticators. Never allow fallback to insecure browser storage (localStorage, sessionStorage, unencrypted IndexedDB) for sensitive session material or root cryptovariables.

## Strict Guidelines
- Engineers MUST ALWAYS inspect and assert the `largeBlob.supported` boolean in registration extension outputs before attempting largeBlob write operations.
- Engineers MUST NOT fall back to unencrypted storage (localStorage, sessionStorage, plaintext IndexedDB) when largeBlob reads or writes fail.
- Engineers MUST treat largeBlob payloads as untrusted inputs by applying AEAD (e.g., AES-256-GCM) with an authenticator-derived key or server-verifiable integrity signature before writing.
- Code MUST explicitly enforce `userVerification: 'required'` or 'preferred' alongside credential requests to guarantee user presence and biometric/PIN gatekeeping.
- Services MUST fail closed with a deterministic `AuthenticatorExtensionError` if an authenticator lacks `largeBlob` capability for hardware-bound session workflows.
- Components NEVER store unpacked session bearer tokens in persistent browser contexts; tokens must exist transiently in memory derived exclusively from the authenticated largeBlob lifecycle.

## Bad vs Good Implementations
### Deterministic Session Bootstrapping via WebAuthn largeBlob Extension

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: The bad example attempts to read largeBlob with loose typing and degrades security by falling back to unencrypted localStorage when the hardware-bound blob is absent or operations fail, exposing session tokens to XSS and token exfiltration.
```typescript
async function bootstrapSession(credentialId: Uint8Array): Promise<string> {
  try {
    const assertion = await navigator.credentials.get({
      publicKey: {
        challenge: crypto.getRandomValues(new Uint8Array(32)),
        allowCredentials: [{ id: credentialId, type: 'public-key' }],
        extensions: {
          // Anti-pattern: Missing typed extension or falling back to localStorage
          largeBlob: { read: true } as unknown as any
        }
      }
    }) as PublicKeyCredential;

    const extensions = assertion.getClientExtensionResults();
    if (extensions.largeBlob?.blob) {
      return new TextDecoder().decode(extensions.largeBlob.blob);
    }
    // Vulnerability: Insecure fallback to unencrypted persistent storage
    return localStorage.getItem('session_backup_token') ?? '';
  } catch (err) {
    // Vulnerability: Leaking session retrieval failure into insecure storage read
    return localStorage.getItem('session_backup_token') ?? '';
  }
}
```

#### Production Standard (Correct)
> **Standard**: The good example strictly enforces `userVerification: 'required'`, explicitly tests the `largeBlob.blob` buffer result, fails closed on missing extension data without insecure fallbacks, and keeps the resulting credentials transient in application memory.
```typescript
interface LargeBlobAuthenticationResult {
  sessionToken: string;
}

export class HardwareSessionError extends Error {
  constructor(message: string, public readonly cause?: unknown) {
    super(message);
    this.name = 'HardwareSessionError';
  }
}

export async function bootstrapHardwareBoundSession(
  credentialId: Uint8Array,
  challenge: Uint8Array
): Promise<LargeBlobAuthenticationResult> {
  const assertion = await navigator.credentials.get({
    publicKey: {
      challenge,
      timeout: 60000,
      userVerification: 'required',
      allowCredentials: [
        {
          id: credentialId,
          type: 'public-key',
          transports: ['internal', 'usb', 'nfc', 'ble']
        }
      ],
      extensions: {
        largeBlob: {
          read: true
        }
      }
    }
  }) as PublicKeyCredential | null;

  if (!assertion) {
    throw new HardwareSessionError('Assertion returned null or was aborted.');
  }

  const extensionOutputs = assertion.getClientExtensionResults();
  const rawBlob = extensionOutputs.largeBlob?.blob;

  if (!rawBlob || !(rawBlob instanceof ArrayBuffer)) {
    // Fail-closed invariant: Do NOT fall back to localStorage/sessionStorage
    throw new HardwareSessionError(
      'Authenticator does not contain a valid hardware-attested largeBlob session.'
    );
  }

  // Ephemeral memory decode: session stays in-memory, never persisted to Web Storage
  const sessionToken = new TextDecoder('utf-8', { fatal: true }).decode(rawBlob);
  return { sessionToken };
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage

WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage defines an industrial-grade behavioral standard for security engineering. Enforces hardware-bound session bootstrapping via the FIDO2 WebAuthn largeBlob extension. Mandates cryptographic verification, fail-closed authenticator support checks, and strict prohibition of plaintext credential caching in vulnerable storage layers such as localStorage or unencrypted IndexedDB. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Falling back to insecure localStorage or plaintext client storage when WebAuthn largeBlob extension operations fail or are unsupported. Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftFalling back to insecure localStorage or plaintext client storage when WebAuthn largeBlob extension operations fail or are unsupported.Critical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS inspect and assert the `largeBlob.supported` boolean in registration extension outputs before attempting largeBlob write operations.

Engineers MUST ALWAYS inspect and assert the `largeBlob.supported` boolean in registration extension outputs before attempting largeBlob write operations.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT fall back to unencrypted storage (localStorage, sessionStorage, plaintext IndexedDB) when largeBlob reads or writes fail.

Engineers MUST NOT fall back to unencrypted storage (localStorage, sessionStorage, plaintext IndexedDB) when largeBlob reads or writes fail.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Engineers MUST treat largeBlob payloads as untrusted inputs by applying AEAD (e.g., AES-256-GCM) with an authenticator-derived key or server-verifiable integrity signature before writing.

Engineers MUST treat largeBlob payloads as untrusted inputs by applying AEAD (e.g., AES-256-GCM) with an authenticator-derived key or server-verifiable integrity signature before writing.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Code MUST explicitly enforce `userVerification

Code MUST explicitly enforce `userVerification: 'required'` or 'preferred' alongside credential requests to guarantee user presence and biometric/PIN gatekeeping.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Services MUST fail closed with a deterministic `AuthenticatorExtensionError` if an authenticator lacks `largeBlob` capability for hardware-bound session workflows.

Services MUST fail closed with a deterministic `AuthenticatorExtensionError` if an authenticator lacks `largeBlob` capability for hardware-bound session workflows.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
6

Components NEVER store unpacked session bearer tokens in persistent browser contexts

Components NEVER store unpacked session bearer tokens in persistent browser contexts; tokens must exist transiently in memory derived exclusively from the authenticated largeBlob lifecycle.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is WebAuthn LargeBlob Hardware-Attested Deterministic Session Storage critical for AI coding assistants?

Enforces hardware-bound session bootstrapping via the FIDO2 WebAuthn largeBlob extension. Mandates cryptographic verification, fail-closed authenticator support checks, and strict prohibition of plaintext credential caching in vulnerable storage layers such as localStorage or unencrypted IndexedDB. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Falling back to insecure localStorage or plaintext client storage when WebAuthn largeBlob extension operations fail or are unsupported.) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

WebAuthn