К основному содержанию
правило

clerk — правило для Cursor: безопасная интеграция Clerk

Правило для Cursor задаёт жёсткие требования к аутентификации Clerk: PKCE, серверные проверки, короткие токены. Пригодится, когда в проекте уже есть Clerk и нужен порядок в безопасности.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/clerk.mdc
Открыть на GitHub

Что делает clerk

Файл .cursor/rules/clerk.mdc применяется ко всем файлам проекта (**/*) и работает как свод правил, которые Cursor подставляет в контекст при генерации кода. Внутри — разделы про безопасность и про сессии с токенами. Каждый пункт идёт с парой примеров: как делать не надо и как надо.

Основные требования: Authorization Code Flow с PKCE вместо устаревшего implicit grant, проверка прав только на сервере через бэкенд-SDK Clerk, ключи и секреты — из менеджера секретов, а не из кода, HTTPS везде. Для паролей правило ссылается на NIST SP 800-63B: минимум 8 символов с MFA и 15 без неё, максимум не меньше 64, блокировка утёкших паролей, MFA для всех. JWT проверяется по подписи, aud, iss и exp, алгоритмы — RS256 или ES256.

Сессии настраиваются на короткоживущие access-токены, обновление идёт через refresh-токены. Отдельно сказано не разбирать JWT вручную там, где это можно отдать SDK. Правило рассчитано на проекты с Clerk в стеке: если аутентификация у вас на другом сервисе, примеры и требования будут мимо.

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

  • убрать из кода захардкоженные секреты Clerk
  • перенести проверку ролей с клиента на сервер
  • настроить PKCE вместо устаревшего implicit grant
  • задать политику паролей и включить MFA
  • проверять подпись и claims у JWT в своём бэкенде

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

  • Проверь мой код аутентификации Clerk по правилу clerk и покажи нарушения
  • Перепиши этот API-роут так, чтобы проверка роли была на сервере через Clerk
  • Настрой сессию Clerk на короткоживущие access-токены с refresh

Как установить clerk

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

.cursor/rules/clerk.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о clerk

Как установить правило clerk в Cursor?

Создайте файл .cursor/rules/clerk.mdc в корне проекта и вставьте в него содержимое правила. Cursor подхватит его автоматически, потому что в globs указано **/*.

Что делает правило clerk?

Задаёт Cursor набор требований к интеграции Clerk: PKCE, серверные проверки авторизации, хранение секретов, политика паролей, MFA и валидация JWT. Агент опирается на них, когда пишет или правит код аутентификации.

Нужен ли Clerk в проекте, чтобы правило сработало?

Да. Все примеры и требования привязаны к Clerk и его SDK — @clerk/nextjs, @clerk/clerk-sdk-node. Для другого провайдера аутентификации они не подойдут.

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

clerk.mdc · CC0-1.0
---
description: This guide establishes definitive best practices for integrating Clerk, focusing on robust security, efficient session management, and secure token handling in line with modern OAuth 2.0 (RFC 9700) and JWT (RFC 8725) standards.
globs: **/*
---
# Clerk Best Practices

Integrating Clerk requires a security-first mindset. Authentication is a primary attack surface; therefore, all Clerk integrations MUST adhere to the strictest security standards. This guide provides actionable, opinionated best practices to ensure your application's identity layer is robust and future-proof.

## 1. Security Best Practices

### 1.1. Enforce Authorization Code Flow with PKCE

**NEVER** use the implicit grant flow. RFC 9700 explicitly deprecates it due to inherent security weaknesses. Always use the Authorization Code Flow with Proof Key for Code Exchange (PKCE). Clerk's client-side SDKs handle PKCE automatically when correctly configured.

❌ **BAD: Relying on deprecated flows (e.g., implicit grant)**
```javascript
// Avoid configuring Clerk in ways that force implicit grants
// (e.g., older SDK versions or misconfigurations)
// Ensure your Clerk application settings are configured for PKCE.
```

✅ **GOOD: Utilize Clerk's Authorization Code Flow with PKCE (default for modern SDKs)**
```javascript
// Clerk's modern SDKs (v5.x+) use PKCE by default.
// Ensure your Clerk application is configured to require PKCE.
// Example: Initializing Clerk in a Next.js app
import { ClerkProvider } from '@clerk/nextjs';

function MyApp({ Component, pageProps }) {
  return (
    <ClerkProvider {...pageProps}>
      <Component {...pageProps} />
    </ClerkProvider>
  );
}
```

### 1.2. Centralize Authentication Logic

All authentication and authorization checks MUST occur server-side and be handled by a centralized, security-vetted library (Clerk's backend SDKs). Never perform critical authentication decisions solely on the client.

❌ **BAD: Client-side authorization decisions**
```javascript
// In a React component:
if (clerk.user.publicMetadata.role === 'admin') {
  // Render admin-only content
}
// This is easily bypassed by manipulating client-side state.
```

✅ **GOOD: Server-side authorization with Clerk's backend SDKs**
```typescript
// In a Next.js API route or server component:
import { getAuth } from '@clerk/nextjs/server';
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const { userId, orgRole } = getAuth(req);

  if (!userId) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  if (orgRole !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' });
  }

  // Proceed with admin-only logic
  res.status(200).json({ message: 'Welcome, admin!' });
}
```

### 1.3. Securely Store API Keys and Secrets

API keys, client secrets, and Clerk private keys MUST NEVER be hardcoded or stored directly in source code or configuration files. Use a managed Secrets Manager (e.g., AWS Secrets Manager, Azure Key Vault, HashiCorp Vault) and reference them at runtime via environment variables.

❌ **BAD: Hardcoding secrets**
```javascript
// .env
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY='pk_test_YOUR_PUBLISHABLE_KEY' // OK for client-side
CLERK_SECRET_KEY='sk_test_YOUR_SECRET_KEY_HARDCODED' // DANGER!

// app/api/webhook.ts
const clerkSecretKey = 'sk_test_YOUR_SECRET_KEY_HARDCODED'; // NEVER DO THIS
```

✅ **GOOD: Using environment variables and a Secrets Manager**
```javascript
// .env.local (for local development, not committed)
CLERK_SECRET_KEY=${CLERK_SECRET_KEY_FROM_SECRETS_MANAGER}

// In production, CLERK_SECRET_KEY is injected from your Secrets Manager.
// app/api/webhook.ts
const clerkSecretKey = process.env.CLERK_SECRET_KEY;
if (!clerkSecretKey) {
  throw new Error('CLERK_SECRET_KEY is not set.');
}
// Use clerkSecretKey for server-side operations
```

### 1.4. Enforce HTTPS Everywhere

All communication involving authentication credentials or sensitive data MUST occur over HTTPS. This is non-negotiable. Configure your application and infrastructure to redirect all HTTP traffic to HTTPS.

❌ **BAD: Allowing HTTP connections**
```
http://your-app.com/login // Insecure
```

✅ **GOOD: Requiring HTTPS**
```
https://your-app.com/login // Secure
```

### 1.5. Implement Strong Password Policies and MFA

Leverage Clerk's robust password policy configuration to enforce NIST SP 800-63B guidelines:
*   Minimum length: 8 characters with MFA, 15 without MFA.
*   Maximum length: At least 64 characters (allow passphrases).
*   Allow all characters (unicode, whitespace).
*   Block common/breached passwords (Clerk integrates with services like HaveIBeenPwned).
*   Enable Multi-Factor Authentication (MFA) for all users, especially for high-risk actions or sensitive accounts.

❌ **BAD: Weak password policy**
```javascript
// Clerk dashboard configured for:
// Minimum password length: 6
// No MFA required
```

✅ **GOOD: Robust password policy and MFA**
```javascript
// Clerk dashboard configured for:
// Minimum password length: 15 (or 8 with mandatory MFA)
// MFA required for all users
// Password complexity rules enabled
// Breached password detection enabled
```

### 1.6. Validate JWTs Rigorously

When handling Clerk's JWT-based sessions (e.g., in custom backend services), always validate the token's signature, audience (`aud`), issuer (`iss`), and expiration (`exp`). Use strong signing algorithms (RS256 or ES256). Clerk's backend SDKs handle this automatically; avoid manual JWT parsing and validation unless absolutely necessary and with extreme caution.

❌ **BAD: Trusting JWTs without full validation**
```javascript
// In a custom backend:
const token = req.headers.authorization?.split(' ')[1];
// const decoded = jwt.decode(token); // DANGER: Does not verify signature or claims
// if (decoded.userId) { /* grant access */ }
```

✅ **GOOD: Using Clerk's verified session/token validation**
```typescript
// In a custom backend (e.g., Express middleware):
import { ClerkExpressWithAuth } from '@clerk/clerk-sdk-node';

app.use(
  ClerkExpressWithAuth({
    jwtKey: process.env.CLERK_JWT_VERIFICATION_KEY, // Use JWKS or Clerk's provided key
  }),
  (req, res, next) => {
    // req.auth will contain validated userId, sessionId, etc.
    if (!req.auth.userId) {
      return res.status(401).json({ error: 'Unauthorized' });
    }
    next();
  }
);
```

## 2. Session Management and Token Handling

### 2.1. Enforce Short-Lived Access Tokens

Configure Clerk sessions to use short-lived access tokens. This minimizes the window of opportunity for token compromise. Refresh tokens should be used to obtain new access tokens.

❌ **BAD: Long-lived access tokens**
```javascript
// Clerk session configuration allowing very long access token lifetimes (e.g., days)
```

✅ **GOOD: Short-lived access tokens**
```javascript
// Clerk session configuration with access token lifetimes in minutes/hours, not days.
// Clerk handles refresh token rotation automatically for its SDKs.
```

### 2.2. Keep Clerk SDKs Up-to-Date

Regularly update your Clerk client and server SDKs to the latest stable versions. This ensures you benefit from security patches, performance improvements, and adherence to the latest best practices. As of early 2025, the CDN release is 5.62.0.

❌ **BAD: Sticking to old SDK versions**
```json
// package.json
"dependencies": {
  "@clerk/nextjs": "^4.x.x", // Outdated, missing critical updates
}
```

✅ **GOOD: Updating Clerk SDKs regularly**
```json
// package.json
"dependencies": {
  "@clerk/nextjs": "^5.x.x", // Always use the latest major/minor version
}
// Run `npm update @clerk/nextjs` or `yarn upgrade @clerk/nextjs`
```

## 3. Code Organization and Vulnerability Prevention

### 3.1. Isolate Clerk Initialization

Initialize Clerk at the highest possible level in your application (e.g., `_app.js` in Next.js, `main.tsx` in React). This ensures consistent behavior and avoids re-initialization issues.

❌ **BAD: Multiple Clerk initializations or conditional loading**
```javascript
// In multiple components:
// const clerk = new Clerk('pk_...'); // Inefficient and error-prone
```

✅ **GOOD: Single, top-level Clerk initialization**
```javascript
// pages/_app.tsx (Next.js)
import { ClerkProvider } from '@clerk/nextjs';
import type { AppProps } from 'next/app';

function MyApp({ Component, pageProps }: AppProps) {
  return (
    <ClerkProvider {...pageProps}>
      <Component {...pageProps} />
    </ClerkProvider>
  );
}

export default MyApp;
```

### 3.2. Implement Automated Security Scans and Code Reviews

Integrate static analysis tools, linters, and dependency scanners into your CI/CD pipeline. Require mandatory code reviews for any changes touching authentication flows, Clerk integration, or security-sensitive areas.

❌ **BAD: Manual, ad-hoc security checks**
```
// Relying solely on manual testing for security vulnerabilities.
```

✅ **GOOD: Automated and human-verified security**
```yaml
# .github/workflows/ci.yml
name: CI/CD Pipeline

jobs:
  security-scan:
    steps:
      - uses: actions/checkout@v3
      - name: Run ESLint
        run: npm run lint
      - name: Run Snyk/Dependabot
        run: snyk test # or dependabot/npm_and_yarn
      # ... other security checks
```

© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc

Похожие правила IDE

Всё по теме «Безопасность» →
clerk-setup clerk Настраивает аутентификацию Clerk через официальный CLI или создаёт новый проект с готовой авторизацией. Помогает подключить провайдера без ручной правки конфигов. CX Codex +1 56 600установок clerk-nextjs-patterns clerk Скилл обучает ИИ-агента паттернам аутентификации Clerk в Next.js: от серверных функций до кэширования. Пригодится при настройке middleware, Server Actions и защите роутов. CX Codex +1 53 400установок clerk-nextjs-skills gocallum Подключает аутентификацию Clerk в Next.js 16 с App Router: proxy.ts, переменные окружения, защита маршрутов и MCP-сервер. CX Codex +1 436установок auth-sec yaklang Маршрутизатор проверок аутентификации и авторизации. Помогает агенту выбрать нужную ветку аудита до перехода к конкретным атакам. CX Codex +1 3 700установок clerk-authentication Mindrally Правила подключения Clerk в Next.js: middleware, хуки, защита серверных действий и маршрутов API. Пригодится, когда проект уже на Clerk и нужен порядок в проверках доступа. CX Codex +1 683установок workos workos Настраивает авторизацию AuthKit и интеграцию WorkOS без аккаунта и API-ключей. Пригодится при подключении SSO, вебхуков или миграции с Auth0 и Clerk. CX Codex +1 3 400установок

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

datadog Правило для Cursor задаёт стандарты Datadog: обязательные теги service, env и version, структурные логи и порядок в именах метрик. ★ 3 579звёзд репо d3 Правило для Cursor задаёт, как писать код визуализаций на D3.js v7+: модульные импорты, selection.join() вместо ручного enter/update/exit, стили через CSS. ★ 3 579звёзд репо cuda Правило задаёт Cursor стиль работы с CUDA C++: проверка ошибок API, разделение host и device кода, оптимизация ядер. Пригодится, если пишете GPU-код и устали от молчаливых падений. ★ 3 579звёзд репо codemirror Правило для Cursor задаёт, как писать редакторы на CodeMirror 6: модульные импорты, неизменяемое состояние, конфигурация через расширения. ★ 3 579звёзд репо chakra-ui Правило для Cursor задаёт, как писать интерфейсы на Chakra UI v2: тема через токены, варианты компонентов через рецепты, стилевые пропсы вместо CSS. ★ 3 579звёзд репо bottle Правило для Cursor задаёт структуру Bottle-проекта: модули вместо одного app.py, конфиг через app.config, валидация Pydantic. Пригодится, если пишете бэкенд на Bottle. ★ 3 579звёзд репо behave Правило задаёт Cursor стандарты для BDD-тестов на behave: тонкие шаги, чистый Gherkin, фикстуры через environment.py. ★ 3 579звёзд репо azure Правило для Cursor с набором требований к коду и инфраструктуре в Azure: IaC, безопасность, экономия ресурсов. Пригодится, если проект живёт в Azure. ★ 3 579звёзд репо

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

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