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

jwt-encode — скилл для Claude Code: подпись JWT-токенов

Собирает и подписывает JSON Web Tokens для тестов и разработки: HMAC, RSA, ECDSA. Пригодится, когда нужен валидный токен прямо в сессии агента.

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

Что делает jwt-encode

Скилл берёт у вас claims, алгоритм, секрет и срок жизни, собирает заголовок и payload, подписывает токен и показывает готовую строку вместе с расшифровкой header и payload. По умолчанию алгоритм HS256, срок — 1 час, а iat и exp попадают в payload, если вы не попросите обратного.

Подпись идёт первым доступным способом: Node.js с библиотекой jose (её установка в глобальный npm только с вашего согласия), затем Python, затем чистый Bash через openssl — но там только HMAC-SHA256. Секрет передаётся через переменную окружения, потому что аргументы командной строки видны в истории шелла и в выводе ps. Если секрет не задан, скилл сгенерирует случайный через openssl rand -base64 32 и пометит его как тестовый.

Для асимметричных схем есть генерация ключей: RSA на 2048 бит и ECDSA P-256. Тестовые ключи советует удалять после работы и не класть в каталоги под контролем версий. Запрос на alg: none скилл выполнит только после явного подтверждения — такой токен не подписан и потому уязвим.

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

  • собрать тестовый access token с нужными claims
  • подписать payload секретом из переменной окружения
  • сгенерировать пару ключей RSA или ECDSA для проверки подписи
  • посмотреть расшифровку header и payload готового токена
  • получить токен без установки библиотек, одним вызовом openssl

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

  • создай JWT с claim sub=1234567890, алгоритм HS256, срок 1 час
  • подпиши этот payload моим секретом из переменной окружения
  • сгенерируй тестовую пару ключей ECDSA P-256

Как установить jwt-encode

1Через Skills CLI (Vercel)

npx skills add jsonwebtoken/jwt-skills --skill jwt-encode -a claude-code

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

~/.claude/skills/jwt-encode/SKILL.md

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

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

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

Похожие

jwt-security Mindrally Скилл задаёт агенту правила создания, проверки и хранения JWT: белый список алгоритмов, обязательные claim-ы, короткие сроки жизни токенов. CX Codex +1 1 600установок api-auth-and-jwt-abuse yaklang Плейбук для проверки bearer-токенов, API-ключей и доверия к claim'ам. Пригодится на пентесте API, где аутентификация держится на JWT или заголовках запроса. CX Codex +1 3 800установок spring-boot-security-jwt giuseppe-trisciuoglio Скилл с готовыми шаблонами JWT-аутентификации для Spring Boot 3.5.x: генерация токенов через JJWT, фильтры, RBAC и OAuth2. CX Codex +1 4 100установок session-management secondsky Скилл для ИИ-кодинга, который помогает собрать вход в аккаунт: JWT-токены, хранение сессий в Redis, обновление токена и настройка cookie. CX Codex +1 408установок jwt-oauth-token-attacks yaklang Скилл для Claude и других ИИ-редакторов: разбор атак на токены JWT и потоки OAuth 2.0. Пригодится, когда нужно проверить, как приложение доверяет токенам и ключам. CX Codex +1 3 800установок typescript-security-review giuseppe-trisciuoglio Проверяет код TypeScript и Node.js на уязвимости OWASP, утечки секретов и ошибки в настройке JWT или CORS. Пригодится перед релизом или при аудите авторизации в Express, NestJS и Next.js. CX Codex +1 3 900установок

Рядом в теме «Безопасность»

Всё по теме «Безопасность» →

Вопросы о jwt-encode

Как установить jwt-encode в Claude?

Выполните npx skills add jsonwebtoken/jwt-skills --skill jwt-encode -a claude-code. После этого файл скилла лежит в ~/.claude/skills/jwt-encode/SKILL.md.

Что делает jwt-encode?

Собирает и подписывает JSON Web Tokens для тестов и разработки: принимает claims, алгоритм, секрет и срок жизни, а на выходе даёт строку токена и разбор header с payload.

Какие алгоритмы поддерживаются?

HMAC, RSA и ECDSA. Подпись через Bash работает только с HMAC-SHA256, для остальных нужен Node.js с jose или Python.

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

SKILL.md · Apache-2.0
---
name: jwt-encode
description: Create and sign JSON Web Tokens (JWTs) for testing and development. Use when the user wants to generate, create, build, or sign a JWT — e.g. "create a JWT", "generate a test token", "sign this payload", "make a JWT with these claims", "build an access token". Supports HMAC, RSA, and ECDSA algorithms.
---

# JWT Encode

Create and sign JWTs for testing and development.

## Steps

1. **Gather inputs**: claims/payload, algorithm (default: HS256), secret or key, expiration (default: 1 hour).
2. **Build header**: `{"alg": "HS256", "typ": "JWT"}`. Add `kid` if provided.
3. **Build payload**: Always include `iat` and `exp` unless the user opts out. Add user-specified claims.
4. **Sign the token** using the best available method (see below).
5. **Display the result**: the full JWT string and a decoded breakdown of header + payload.

## Signing Methods

Pick the first available. Use the user's claims, secret, and algorithm — the examples below are templates only. Always pass the secret via an inline env var to avoid shell history exposure.

**Node.js** (preferred):

First, ensure `jose` is available — install it globally if missing:

```bash
node --input-type=module -e "await import('jose')" 2>/dev/null || npm install -g jose
```

Then sign the token:

```bash
JWT_SECRET='user-provided-secret' node --input-type=module -e "import {SignJWT} from 'jose'; console.log(await new SignJWT({sub:'1234567890'}).setProtectedHeader({alg:'HS256'}).setIssuedAt().setExpirationTime('1h').sign(new TextEncoder().encode(process.env.JWT_SECRET)))"
```

**Python**:

```bash
JWT_SECRET='user-provided-secret' python3 -c "import jwt,time; print(jwt.encode({'sub':'1234567890','iat':int(time.time()),'exp':int(time.time())+3600}, __import__('os').environ['JWT_SECRET'], algorithm='HS256'))"
```

**Bash** (HMAC-SHA256 only):

```bash
header=$(printf '{"alg":"HS256","typ":"JWT"}' | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
payload=$(printf '{"sub":"1234567890","iat":1700000000,"exp":1700003600}' | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
signature=$(printf '%s.%s' "$header" "$payload" | openssl dgst -sha256 -hmac "$JWT_SECRET" -binary | openssl base64 -e -A | tr '+/' '-_' | tr -d '=')
printf '%s.%s.%s\n' "$header" "$payload" "$signature"
```

## Generating Test Keys

Only when the user needs asymmetric keys:

```bash
# RSA
openssl genrsa -out private.pem 2048 && openssl rsa -in private.pem -pubout -out public.pem
# ECDSA P-256
openssl ecparam -genkey -name prime256v1 -noout -out private-ec.pem && openssl ec -in private-ec.pem -pubout -out public-ec.pem
```

## Security Rules

- **Never pass secrets as literal command-line arguments.** Use environment variables (`$JWT_SECRET`) or file input (`--secret-file`). Command args are visible in shell history and `ps` output.
- **Never install packages without user consent.** Do not use `npx -y` or `pip install` silently.
- **If the user doesn't provide a secret**, generate a random one with `openssl rand -base64 32` and clearly label it as a test-only secret.
- **`alg: none`** — If the user requests it, warn that this creates an unsigned token exploitable via CVE-2015-9235. Only create it after explicit confirmation.
- **Generated key files** — Remind the user to delete test keys when done. Never write keys to version-controlled directories.

---

© jsonwebtoken · Apache-2.0 · jsonwebtoken/jwt-skills

Смотрите также

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

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