К основному содержанию
скилл CX Codex

authentication-patterns — скилл для Claude Code: разбор и установка

Скилл даёт правила выбора между сессиями, JWT и OAuth, шаблоны библиотек вроде NextAuth и чек-лист безопасности. Помогает настроить вход пользователей без типовых уязвимостей.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add zebbern/claude-code-guide --skill authentication-patterns -a claude-code
Открыть на GitHub

Что делает authentication-patterns

Скилл содержит архитектурные ориентиры по четырём подходам: сессии в базе данных, JWT, OAuth 2.0 / OIDC и Passkeys. Внутри собраны критерии выбора готовых провайдеров — NextAuth, Clerk, Supabase Auth и Lucia. Для NextAuth приведён готовый шаблон роута с Prisma.

Для JWT заданы жёсткие правила: время жизни access-токена до 15 минут, хранение строго в cookies с флагами httpOnly, Secure и SameSite=Lax. Хранить токены в localStorage или sessionStorage запрещено из-за угрозы XSS. Для отзыва токенов требуется серверный чёрный список. Каждый refresh-токен одноразовый.

Финальный чек-лист безопасности перед деплоем требует ограничить попытки входа до 5–10 в минуту на IP, защитить роуты от CSRF и хэшировать пароли только через argon2id или bcrypt с фактором 12+.

Какие задачи решает

  • выбрать архитектуру между сессиями, JWT, OAuth и Passkeys
  • настроить ротацию refresh-токенов и безопасное хранение в cookies
  • проверить эндпоинты входа по чек-листу защиты от атак перебором
  • настроить хэширование паролей на базе bcrypt или argon2id

Примеры запросов агенту

  • Проверь эндпоинт авторизации по чек-листу безопасности authentication-patterns
  • Помоги выбрать между сессиями в БД и JWT для мобильного API
  • Покажи правильную настройку ротации refresh-токенов с httpOnly cookies

Как установить authentication-patterns

1Через Skills CLI (Vercel)

npx skills add zebbern/claude-code-guide --skill authentication-patterns -a claude-code

2Вручную: положить файлы

~/.claude/skills/authentication-patterns/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/authentication-patterns/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о authentication-patterns

Как установить authentication-patterns в Claude Code?

Выполните команду npx skills add zebbern/claude-code-guide --skill authentication-patterns -a claude-code. Файл конфигурации сохранится в ~/.claude/skills/authentication-patterns/SKILL.md.

Что делает скилл authentication-patterns?

Он передаёт агенту правила проектирования входа, критерии выбора провайдеров (Clerk, Supabase, NextAuth, Lucia) и чек-лист защиты перед релизом.

Где скилл рекомендует хранить токены авторизации?

Токены предписано хранить в cookies с флагами httpOnly, Secure и SameSite=Lax. Использовать localStorage и sessionStorage запрещено.

Исходный текст

SKILL.md · MIT
---
name: authentication-patterns
description: "Authentication patterns: session vs JWT vs OAuth comparison, provider selection (NextAuth, Clerk, Supabase Auth), security checklist, and common mistakes. Use when implementing auth, reviewing auth flows, or choosing auth providers."
---

# Authentication Patterns Skill

Reference for implementing secure, production-ready authentication.

## WHEN_TO_USE

Apply this skill when implementing authentication in a project, reviewing existing auth flows for security issues, choosing between auth providers, or migrating between auth strategies. Use the security checklist before shipping any auth-related change.

## AUTH_APPROACHES

| Approach | How It Works | Best For | Drawbacks |
|----------|-------------|----------|-----------|
| Session-based | Server stores session in DB/Redis, client holds session ID cookie | Traditional server-rendered apps, apps needing instant revocation | Requires server-side storage, harder to scale horizontally without shared store |
| JWT (stateless) | Server signs token, client sends it on each request | API-first apps, microservices, mobile clients | Cannot revoke without blocklist, token size grows with claims |
| OAuth 2.0 / OIDC | Delegates auth to external provider (Google, GitHub, etc.) | Social login, enterprise SSO, reducing auth responsibility | More complex flow, depends on external provider availability |
| Passkeys / WebAuthn | Cryptographic key pair, no passwords | High-security apps, passwordless UX | Limited browser support legacy, user education needed |

### Decision Guide

- **Server-rendered app with simple needs** → Session-based
- **SPA or mobile app calling APIs** → JWT with refresh token rotation
- **Want social login or SSO** → OAuth 2.0 / OIDC
- **Greenfield with modern UX goals** → Passkeys + OAuth fallback

## JWT_BEST_PRACTICES

### Token Lifecycle

```
Login → Access Token (short-lived) + Refresh Token (long-lived, rotated)
  │
  ├─ Access Token: 15 min expiry, sent via httpOnly cookie or Authorization header
  │
  └─ Refresh Token: 7-30 day expiry, stored in httpOnly secure cookie
       │
       └─ On use: issue new access + new refresh token, invalidate old refresh token
```

### Rules

- [P0-MUST] Set short expiry on access tokens (15 minutes or less).
- [P0-MUST] Store tokens in `httpOnly`, `Secure`, `SameSite=Lax` cookies — never in `localStorage` or `sessionStorage`.
- [P0-MUST] Implement refresh token rotation — each refresh token is single-use.
- [P0-MUST] Maintain a server-side blocklist for revoked refresh tokens.
- [P1-SHOULD] Include only essential claims in JWT payload (sub, iat, exp, role). Keep it small.
- [P1-SHOULD] Use asymmetric signing (RS256 or ES256) for distributed systems; symmetric (HS256) for single-service only.
- [P1-SHOULD] Validate `iss`, `aud`, and `exp` claims on every request.
- [P2-MAY] Use JWE (encrypted JWT) when token payload contains sensitive data.

### Token Storage Comparison

| Storage | XSS Safe | CSRF Safe | Recommendation |
|---------|----------|-----------|----------------|
| `httpOnly` cookie | Yes | No (needs CSRF token) | Recommended |
| `localStorage` | No | Yes | Never use for auth tokens |
| `sessionStorage` | No | Yes | Never use for auth tokens |
| In-memory (JS variable) | Yes | Yes | OK for SPAs, lost on refresh |

## PROVIDER_PATTERNS

### Comparison

| Provider | Type | Best For | Pricing | Key Features |
|----------|------|----------|---------|-------------|
| NextAuth / Auth.js | OSS library | Next.js apps wanting full control | Free | 80+ providers, DB adapters, self-hosted |
| Clerk | Managed service | Fast launch, pre-built UI, user management | Free tier, then per-MAU | Drop-in components, user dashboard, org support |
| Supabase Auth | Managed (part of Supabase) | Apps already using Supabase for DB/storage | Free tier, then per-MAU | Row-level security integration, magic links, SSO |
| Lucia | OSS library | Full control, minimal abstraction | Free | Session-based, framework-agnostic, type-safe |

### When to Use Each

- **NextAuth / Auth.js**: You want provider flexibility, self-hosting, and database session control. Best when you need custom flows.
- **Clerk**: You want auth done fast with pre-built UI components. Best for MVPs and teams that don't want to build auth UI.
- **Supabase Auth**: You're already using Supabase. Auth integrates with RLS policies for row-level security.
- **Lucia**: You want a minimal, type-safe session library without framework lock-in.

### NextAuth.js Setup Pattern

```typescript
// app/api/auth/[...nextauth]/route.ts
import NextAuth from "next-auth";
import GitHub from "next-auth/providers/github";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { prisma } from "@/lib/prisma";

export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [
    GitHub({
      clientId: process.env.GITHUB_CLIENT_ID!,
      clientSecret: process.env.GITHUB_CLIENT_SECRET!,
    }),
  ],
  callbacks: {
    session({ session, user }) {
      session.user.id = user.id;
      return session;
    },
  },
});
```

## SECURITY_CHECKLIST

### Before Shipping Auth

- [ ] **Rate limiting**: Login endpoint limited to 5-10 attempts per minute per IP.
- [ ] **CSRF protection**: Anti-CSRF tokens on all state-changing requests (or use `SameSite=Lax` cookies).
- [ ] **Password hashing**: Using bcrypt (cost 12+) or argon2id — never MD5, SHA-1, or plain SHA-256.
- [ ] **HTTPS only**: All auth endpoints served over TLS. Cookies have `Secure` flag.
- [ ] **Input validation**: Email format, password length (min 8, max 128), no SQL/NoSQL injection vectors.
- [ ] **Account enumeration**: Login and registration return the same response whether account exists or not.
- [ ] **Session invalidation**: Logout invalidates server-side session/refresh token, not just client cookie.
- [ ] **MFA support**: TOTP (authenticator app) or WebAuthn as second factor for sensitive accounts.
- [ ] **Password reset**: Time-limited tokens (1 hour), single-use, sent over secure channel.
- [ ] **Audit logging**: Log auth events (login, logout, failed attempts, password changes) with timestamp and IP.

### Password Hashing

```typescript
// Using bcrypt
import bcrypt from "bcrypt";

const SALT_ROUNDS = 12;

async function hashPassword(password: string): Promise<string> {
  return bcrypt.hash(password, SALT_ROUNDS);
}

async function verifyPassword(password: string, hash: string): Promise<boolean> {
  return bcrypt.compare(password, hash);
}
```

```typescript
// Using argon2 (preferred for new projects)
import argon2 from "argon2";

async function hashPassword(password: string): Promise<string> {
  return argon2.hash(password, { type: argon2.argon2id });
}

async function verifyPassword(hash: string, password: string): Promise<boolean> {
  return argon2.verify(hash, password);
}
```

## COMMON_MISTAKES

| Mistake | Risk | Fix |
|---------|------|-----|
| Storing JWT in `localStorage` | XSS can steal tokens | Use `httpOnly` cookies |
| Long-lived JWTs (days/weeks) | Stolen token is valid for extended period | 15 min access token + refresh rotation |
| Missing CSRF protection | Attackers can forge requests from other sites | `SameSite=Lax` cookies + CSRF token |
| Weak password requirements | Brute force and credential stuffing | Min 8 chars, check against breached password lists |
| Exposing user existence on login | Account enumeration | Generic "Invalid credentials" message |
| Not rotating refresh tokens | Stolen refresh token grants indefinite access | Single-use refresh tokens with rotation |
| Hardcoding secrets in source | Credential leak via git history | Use environment variables, never commit secrets |
| Missing rate limiting on login | Brute force attacks | 5-10 attempts/min per IP, exponential backoff |
| Rolling your own crypto | Subtle vulnerabilities | Use established libraries (bcrypt, argon2, jose) |
| Not validating JWT claims | Token misuse across services | Always verify `iss`, `aud`, `exp` |

© zebbern · MIT · zebbern/claude-code-guide

Похожие скиллы

Все скиллы по теме «Безопасность» →
git-guardrails-claude-code Matt Pocock Скилл ставит хук Claude Code, который останавливает опасные Git-команды до их запуска. Нужен, если агент не должен делать push или удалять изменения. 499 069установок ponytail-review DietrichGebert Скилл проверяет изменения глубже обычного diff: читает связанный код, ищет ошибки, риски, проблемы нагрузки и недостающие тесты. Пригодится для ревью PR и коммитов. CX Codex +1 57 000установок ponytail-audit DietrichGebert Проверяет репозиторий и ранжирует ошибки, риски и лишний код. Подойдёт, если нужен разовый разбор без автоматических правок. CX Codex +1 45 400установок security-audit cloudflare Проверяет кодовую базу на уязвимости и ищет нарушения границ доверия. Пригодится перед релизом или для точечного разбора опасных участков кода. CX Codex +1 54 800установок security-and-hardening addyosmani Помогает проектировать защиту и проверять код на уязвимости при работе с вводом, авторизацией, сессиями и внешними сервисами. Подойдёт перед релизом и при создании функций, которые обрабатывают недоверенные данные. CX Codex +1 70 200установок supabase официальный supabase Скилл помогает настраивать базу данных, аутентификацию и RLS в Supabase без скрытых дыр в безопасности. CX Codex GP ChatGPT 8установок

Из того же набора40

code-documenter Скилл для написания докстрингов, спецификаций OpenAPI и сайтов документации. Пригодится, когда код есть, а описаний к нему нет. CX Codex +1 ★ 4 679звёзд репо chart-image Генерирует графики в PNG через Node.js без браузера и Puppeteer. Пригодится для отчётов, дашбордов и оповещений на сервере. CX Codex +1 ★ 4 679звёзд репо caching Скилл помогает проектировать и проверять кэширование: выбирать TTL, задавать ключи и продумывать инвалидацию. Пригодится при работе с кэшем API, сервиса или клиентского приложения. CX Codex +1 ★ 4 679звёзд репо aws-penetration-testing Скилл ведёт агента по пентесту AWS: перечисление IAM, повышение привилегий, SSRF к metadata, разбор S3 и Lambda. CX Codex +1 ★ 4 679звёзд репо audit-flow Скилл помогает интерактивно проследить путь данных через CODE, API, AUTH, DATA и NETWORK, сохранить ход аудита в SQLite и экспортировать результат. Пригодится для разбора безопасности, отладки и анализа архитектуры. CX Codex +1 ★ 4 679звёзд репо api-shape-explorer Скилл запускает несколько субагентов сразу, чтобы получить радикально разные варианты интерфейса модуля и сравнить их до написания кода. CX Codex +1 ★ 4 679звёзд репо active-directory-attacks Скилл снабжает агента инструкциями по тестированию Active Directory на проникновение. Он подсказывает шаги для разведки домена, атак на Kerberos и проверки уязвимостей. CX Codex +1 ★ 4 679звёзд репо academic-paper-reviewer Скилл имитирует рецензирование научной статьи: оценивает новизну, методологию, результаты и текст. Пригодится, чтобы получить замечания и рекомендации по доработке. CX Codex +1 ★ 4 679звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой