/

Software Testing

How to Test Authentication: A Complete Guide for Web Applications

|

Yunhao Jiao

Authentication is where the most severe application security vulnerabilities live — and where automated testing coverage is most commonly missing. A broken authentication flow doesn't just inconvenience users; it exposes user data, enables account takeovers, and creates regulatory liability.

For teams using AI coding tools, authentication testing is especially critical. AI coding agents generate authentication flows that work correctly for the happy path and frequently miss edge cases: token expiration handling, session invalidation on logout, OAuth state parameter validation, concurrent session management.

This guide covers what authentication testing actually requires and how to implement it systematically.

What Authentication Testing Covers

Authentication testing verifies that your application correctly identifies users and maintains their identity throughout a session. It spans multiple layers:

Functional authentication: Does login work? Can users log out? Does password reset function correctly?

Session management: Are sessions correctly established, maintained, and terminated? Are session tokens secure?

Security: Does the application resist authentication attacks? Are authorization checks enforced?

Edge cases: What happens when tokens expire? When a user logs in from a new device? When sessions conflict?

The Complete Authentication Test Checklist

Login Flow

  • Valid credentials succeed and establish a session

  • Invalid credentials return an appropriate error without revealing which field was wrong ("Invalid email or password", not "Email not found")

  • Empty credentials are handled gracefully

  • Extremely long inputs don't cause server errors

  • Rate limiting is enforced after repeated failed attempts

  • CSRF protection is in place for form-based login

Session Management

  • Session token is set as an HttpOnly cookie (not accessible via JavaScript) or in memory (not localStorage)

  • Session expires after the configured inactivity timeout

  • Session is invalidated on logout — the old token can't be reused after logout

  • Session is invalidated after password change

  • Concurrent sessions behave according to your policy (allow all, limit to one, etc.)

Password Reset

  • Reset link is sent to the email if it exists (without confirming whether the email exists to unauthenticated users)

  • Reset tokens expire after a reasonable time window (1-24 hours typically)

  • Reset tokens are single-use — can't be reused after the password is changed

  • Weak passwords are rejected with clear error messages

OAuth / SSO Flows

  • The authorization redirect uses a state parameter to prevent CSRF

  • The state parameter is validated on callback

  • The callback handler validates the authorization code before exchanging it

  • Failed OAuth attempts fail gracefully without server errors

  • Account linking (connecting OAuth to an existing account) requires verification

Protected Route Access

  • All protected routes return 401 (or redirect to login) for unauthenticated requests

  • All protected routes return 403 for authenticated users without sufficient permissions

  • Authentication checks happen server-side, not just in the UI

  • Cookie manipulation (clearing the session cookie) correctly unauthenticates

Automating Authentication Tests

Testing Auth Flows With TestSprite

TestSprite's agentic testing engine generates authentication test cases automatically from your requirements. When it reads a PRD that specifies authentication flows, it generates:

  • Login with valid credentials

  • Login with invalid credentials (wrong password, unknown email, empty fields)

  • Logout and session invalidation verification

  • Protected route access without authentication

  • OAuth flow completion and failure handling

The engine runs these against your actual application in cloud sandboxes, using isolated test users so tests don't interfere with each other or leave permanent state.

Testing Auth in Playwright

For script-based testing, Playwright has built-in authentication state management:

This authenticates once and reuses the auth state across all tests in the "authenticated" project, avoiding repeated login flows for every test.

API-Level Auth Testing

For testing authentication at the API level:

Common AI-Generated Auth Bugs to Test For

Specific patterns that AI coding agents frequently get wrong:

Missing authorization on resource endpoints. AI generates CRUD endpoints that correctly require authentication but don't verify that the authenticated user owns the resource. /api/orders/:id might require login but return any order by ID, not just the authenticated user's orders.

Session cookie misconfiguration. AI-generated session setup often omits HttpOnly: true and Secure: true flags on session cookies, leaving tokens accessible to JavaScript and transmittable over HTTP.

OAuth state parameter omission. AI generates OAuth flows that redirect to the provider and handle the callback, but frequently omit generating and validating the state parameter — leaving the flow vulnerable to CSRF.

Logout that doesn't invalidate server-side. AI-generated logout often clears the client-side cookie or localStorage without invalidating the session server-side. The token remains valid until expiry.

All of these are caught by TestSprite's authentication test coverage when applied against your application.

Set up authentication testing with TestSprite →