Next.js & Fullstack(ТЗ 2 из 10)
ТЗ: Enterprise SaaS-дашборд с Auth, RBAC и HttpOnly JWT сессиями
Next.js & Fullstack2 шагов • +10 XP

ТЗ: Enterprise SaaS-дашборд с Auth, RBAC и HttpOnly JWT сессиями

Спецификация масштабируемой системы аутентификации и ролевого контроля доступа (Admin, Manager, Member) на базе Next.js 16 Server Components, Middleware и криптографических JWT без утечки токенов.

~14 ч работыNext.js 16 App RouterServer ComponentsNext.js MiddlewareJose (JWT)HttpOnly CookiesRBAC MatrixTypeScript Strict
+5 XP за шаг
Выполнено 0 из 2 шагов (0%)
Трудозатраты~14 рабочих часов
Фриланс вилка~$630 – $1,050 (€560 – €980)
Оценка веб-студии~$1,330 – $2,240 (€1260 – €2100)

ТЗ заказчика (исходный бриф):

Безопасность данных — наш главный приоритет при аудите SOC2. Ни один токен не должен быть доступен клиентскому JS через XSS, а права должны проверяться как на роутере, так и в серверных функциях.
Ключевые требования:
  • •Изоляция сессионных токенов в HttpOnly, Secure, SameSite=Strict cookies
  • •Проверка валидности сессии в Next.js Middleware до выполнения серверного рендеринга
  • •Компонентный Guard для скрытия элементов UI в зависимости от роли (Admin/Manager/Member)
  • •Защита Server Actions от подделки роли через контекст сессии
Ограничения проекта:
  • •Полный запрет на использование localStorage и sessionStorage для токенов
  • •Middleware не должен обращаться к тяжелой базе данных на каждый статический ассет
Критерии приёмки (KPI):
  • Zero Token Leakage (невозможность перехвата токена через XSS)
  • Задержка Middleware < 5ms на защищенных роутах

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 2

Шифрование и подпись сессионного JWT через библиотеку Jose

~45 минСложный

Практическое руководство:

Реализовать модуль auth/session.ts с криптографической подписью токена алгоритмом HS256 через библиотеку jose (совместимую с Edge Runtime).

Важные технические нюансы и подводные камни:

Секретный ключ JWT_SECRET должен быть длиной не менее 32 байт и храниться строго в process.env.

Архитектурная база (Почему выбрано такое решение):

Библиотека jose не использует нативные модули Node.js crypto, что позволяет выполнять верификацию токенов на Vercel Edge Runtime с нулевыми задержками.

Совет эксперта (Best Practice):

Всегда передавайте orgId в payload сессии, чтобы исключить кросс-арендные утечки данных (Multi-Tenancy Isolation).

Ожидаемый артефакт этапа:

Модуль auth/session.ts с функциями encryptSession, decryptSession и типизацией ролей.

TYPESCRIPT
// lib/auth/session.ts
import { SignJWT, jwtVerify } from 'jose'
import { cookies } from 'next/headers'

export type UserRole = 'admin' | 'manager' | 'member'

export interface SessionPayload {
  userId: string
  email: string
  role: UserRole
  orgId: string
  expiresAt: Date
}

const secretKey = process.env.JWT_SECRET!
const encodedKey = new TextEncoder().encode(secretKey)

export async function encryptSession(payload: SessionPayload): Promise<string> {
  return new SignJWT({ ...payload })
    .setProtectedHeader({ alg: 'HS256' })
    .setIssuedAt()
    .setExpirationTime('7d')
    .sign(encodedKey)
}

export async function decryptSession(session: string | undefined): Promise<SessionPayload | null> {
  if (!session) return null
  try {
    const { payload } = await jwtVerify(session, encodedKey, {
      algorithms: ['HS256']
    })
    return payload as unknown as SessionPayload
  } catch {
    return null
  }
}

export async function getSession(): Promise<SessionPayload | null> {
  const cookieStore = await cookies()
  const sessionCookie = cookieStore.get('saas_session')?.value
  return decryptSession(sessionCookie)
}
2
Этап 2 из 2

Edge Middleware для защиты роутов и проверки RBAC прав

~60 минСложный

Типичные грабли на этом ТЗ

1 антипаттерна

Что сдаём клиенту (Deliverables)

Чек-лист сдачи
Криптографическая сессионная модель на Jose
Edge Middleware с ролевой матрицей RBAC
Защищенные Server Components с контекстом организации