To implement JWT authentication on Claude Code, open your project, describe your stack, and prompt Claude to scaffold the full auth flow: token generation, middleware, protected routes, and refresh logic. Claude Code handles the boilerplate end-to-end so you stay in flow without switching to docs or StackOverflow.

- Works with any backend: Node/Express, Python/FastAPI, Go, Ruby on Rails, and more
- Claude Code can generate, review, and test JWT logic in a single session
- Use `/usage` to check your session limits before starting a large auth refactor

## What is JWT authentication and why use it in Claude Code?

JSON Web Tokens (JWTs) are a compact, URL-safe standard for transmitting authenticated identity claims between a client and a server. A signed JWT carries a payload (user ID, roles, expiry) that the server can verify without hitting a database on every request. This makes them a go-to choice for stateless REST APIs and single-page apps.

Claude Code is well-suited to JWT work because authentication is structurally repetitive: the token-signing logic, middleware guard, refresh-token rotation, and error responses follow predictable patterns. Claude can scaffold all of that quickly, leaving you to focus on your app's specific business rules rather than wiring up boilerplate.

## How to implement JWT authentication step by step in Claude Code

### 1\. Set context before you start

Open your project in Claude Code and give it a quick orientation prompt. The more specific you are, the less back-and-forth you'll need:

```
We're building a Node/Express REST API. I need full JWT authentication:
- POST /auth/login returns a signed access token (15 min expiry) and a refresh token (7 days)
- A middleware function that validates the access token on protected routes
- POST /auth/refresh to rotate the refresh token
- Use the jsonwebtoken and bcrypt libraries
```

Claude Code will read your existing file tree via its built-in tools, so it will place files in the right directories and import from your existing modules automatically.

### 2\. Ask Claude to generate the token utilities

Start narrow: ask for the JWT utility module first, review it, then move on to middleware. A focused prompt produces cleaner output than asking for everything at once:

```
Create src/utils/jwt.ts with:
- generateAccessToken(userId, roles)
- generateRefreshToken(userId)
- verifyAccessToken(token)
- verifyRefreshToken(token)
Read JWT_SECRET and REFRESH_SECRET from process.env
```

### 3\. Generate and wire up the auth middleware

Once the utility functions exist, ask Claude to write the Express middleware that reads the `Authorization: Bearer <token>` header, calls `verifyAccessToken`, and attaches the decoded payload to `req.user`. Request inline error handling with the correct HTTP status codes (401 for missing/expired, 403 for invalid signature).

### 4\. Scaffold the auth routes

Ask Claude to produce the login and refresh routes in one shot, referencing the utility file it already created. Claude Code's context window keeps earlier code in scope, so it will import correctly without you copying file paths manually.

### 5\. Write tests in the same session

Don't leave the session to write tests later. While the context is hot, prompt Claude directly:

```
Write Jest unit tests for src/utils/jwt.ts covering:
- Valid token round-trip
- Expired token throws TokenExpiredError
- Tampered signature throws JsonWebTokenError
```

Keeping tests in the same session means Claude already knows the exact function signatures and library versions you're using, producing accurate, runnable specs.

### 6\. Use slash commands to review and run

Claude Code's slash commands are useful at every stage of auth work:

- **/review**: Ask Claude to audit the generated JWT logic for common vulnerabilities (algorithm confusion, missing expiry checks, weak secrets)
- **/test**: Run your test suite from inside the session and ask Claude to fix failures inline
- **/usage**: Check how much of your session limit you've consumed before starting a big refactor

## Common JWT pitfalls Claude Code helps you avoid

Ask Claude to review your implementation against these known failure modes. The API testing workflow on Claude Code pairs well with a JWT security review:

| Vulnerability | What goes wrong | How to prompt Claude to fix it |
| --- | --- | --- |
| Algorithm confusion (`alg: none`) | Attacker strips the signature entirely | "Reject tokens whose header specifies alg: none or any unexpected algorithm" |
| Missing `exp` claim | Tokens never expire, leaked tokens stay valid forever | "Throw if exp is not present or already elapsed during verification" |
| Weak secret stored in code | Secret committed to Git is compromised | "Move JWT_SECRET to .env and add .env to .gitignore" |
| No refresh token rotation | Stolen refresh token can be replayed indefinitely | "Invalidate the old refresh token when issuing a new one" |
| Sensitive data in payload | Payload is base64-encoded, not encrypted | "Remove passwords, PII, and secrets from the JWT payload" |

## Key takeaways

1. Orient Claude Code with your stack and desired token structure before generating any files
2. Build incrementally: utilities first, middleware second, routes third, tests fourth
3. Keep the test-writing in the same session so Claude has full context of function signatures
4. Use `/review` to audit for algorithm confusion, missing expiry, and weak secrets
5. Check your session usage before long auth sessions with `/usage`
6. Never store secrets in code: always read from environment variables
