auth

от openai

Руководство по интеграции аутентификации — Clerk (нативный Vercel Marketplace), Descope и настройка Auth0 для приложений Next.js. Охватывает паттерны аутентификации в middleware,…

npx skills add https://github.com/openai/plugins --skill auth

Authentication Integrations

You are an expert in authentication for Vercel-deployed applications — covering Clerk (native Vercel Marketplace integration), Descope, and Auth0.

Clerk (Recommended — Native Marketplace Integration)

Clerk is a native Vercel Marketplace integration with auto-provisioned environment variables and unified billing. Current SDK: @clerk/nextjs v7 (Core 3, March 2026).

Install via Marketplace

# Install Clerk from Vercel Marketplace (auto-provisions env vars)
vercel integration add clerk

Auto-provisioned environment variables:

  • CLERK_SECRET_KEY — server-side API key
  • NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY — client-side publishable key

SDK Setup

# Install the Clerk Next.js SDK
npm install @clerk/nextjs

Middleware Configuration

// middleware.ts
import { clerkMiddleware } from "@clerk/nextjs/server";

export default clerkMiddleware();

export const config = {
  matcher: [
    // Skip Next.js internals and static files
    "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",
    // Always run for API routes
    "/(api|trpc)(.*)",
  ],
};

Protect Routes

// middleware.ts — protect specific routes
import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server";

const isProtectedRoute = createRouteMatcher(["/dashboard(.*)", "/api(.*)"]);

export default clerkMiddleware(async (auth, req) => {
  if (isProtectedRoute(req)) {
    await auth.protect();
  }
});

Frontend API Proxy (Core 3)

Proxy Clerk's Frontend API through your own domain to avoid third-party requests:

// middleware.ts
export default clerkMiddleware({
  frontendApiProxy: { enabled: true },
});

Provider Setup

// app/layout.tsx
import { ClerkProvider } from "@clerk/nextjs";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <ClerkProvider>
      <html lang="en">
        <body>{children}</body>
      </html>
    </ClerkProvider>
  );
}

Sign-In and Sign-Up Pages

// app/sign-in/[[...sign-in]]/page.tsx
import { SignIn } from "@clerk/nextjs";

export default function Page() {
  return <SignIn />;
}
// app/sign-up/[[...sign-up]]/page.tsx
import { SignUp } from "@clerk/nextjs";

export default function Page() {
  return <SignUp />;
}

Add routing env vars to .env.local:

NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up

Access User Data

// Server component
import { currentUser } from "@clerk/nextjs/server";

export default async function Page() {
  const user = await currentUser();
  return <p>Hello, {user?.firstName}</p>;
}
// Client component
"use client";
import { useUser } from "@clerk/nextjs";

export default function UserGreeting() {
  const { user, isLoaded } = useUser();
  if (!isLoaded) return null;
  return <p>Hello, {user?.firstName}</p>;
}

API Route Protection

// app/api/protected/route.ts
import { auth } from "@clerk/nextjs/server";

export async function GET() {
  const { userId } = await auth();
  if (!userId) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }
  return Response.json({ userId });
}

Descope

Descope is available on the Vercel Marketplace with native integration support.

Install via Marketplace

vercel integration add descope

SDK Setup

npm install @descope/nextjs-sdk

Provider and Middleware

// app/layout.tsx
import { AuthProvider } from "@descope/nextjs-sdk";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <AuthProvider projectId={process.env.NEXT_PUBLIC_DESCOPE_PROJECT_ID!}>
      <html lang="en">
        <body>{children}</body>
      </html>
    </AuthProvider>
  );
}
// middleware.ts
import { authMiddleware } from "@descope/nextjs-sdk/server";

export default authMiddleware({
  projectId: process.env.DESCOPE_PROJECT_ID!,
  publicRoutes: ["/", "/sign-in"],
});

Sign-In Flow

"use client";
import { Descope } from "@descope/nextjs-sdk";

export default function SignInPage() {
  return <Descope flowId="sign-up-or-in" />;
}

Auth0

Auth0 provides a mature authentication platform with extensive identity provider support.

SDK Setup

npm install @auth0/nextjs-auth0

Configuration

// lib/auth0.ts
import { Auth0Client } from "@auth0/nextjs-auth0/server";

export const auth0 = new Auth0Client();

Required environment variables:

AUTH0_SECRET=<random-secret>
AUTH0_BASE_URL=http://localhost:3000
AUTH0_ISSUER_BASE_URL=https://your-tenant.auth0.com
AUTH0_CLIENT_ID=<client-id>
AUTH0_CLIENT_SECRET=<client-secret>

Middleware

// middleware.ts
import { auth0 } from "@/lib/auth0";
import { NextRequest, NextResponse } from "next/server";

export async function middleware(request: NextRequest) {
  return await auth0.middleware(request);
}

export const config = {
  matcher: [
    "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)",
  ],
};

Access Session Data

// Server component
import { auth0 } from "@/lib/auth0";

export default async function Page() {
  const session = await auth0.getSession();
  return session ? (
    <p>Hello, {session.user.name}</p>
  ) : (
    <a href="/auth/login">Log in</a>
  );
}

Decision Matrix

NeedRecommendedWhy
Fastest setup on VercelClerkNative Marketplace, auto-provisioned env vars
Passwordless / social login flowsDescopeVisual flow builder, Marketplace native
Enterprise SSO / SAML / multi-tenantAuth0Deep enterprise identity support
Pre-built UI componentsClerkDrop-in <SignIn />, <UserButton />
Vercel unified billingClerk or DescopeBoth are native Marketplace integrations

Clerk Core 3 Breaking Changes (March 2026)

Clerk provides an upgrade CLI that scans your codebase and applies codemods: npx @clerk/upgrade. Requires Node.js 20.9.0+.

  • auth() is async — always use const { userId } = await auth(), not synchronous
  • auth.protect() moved — use await auth.protect() directly, not from the return value of auth()
  • clerkClient() is async — use await clerkClient() in middleware handlers
  • authMiddleware() removed — migrate to clerkMiddleware()
  • @clerk/types deprecated — import types from SDK subpath exports: import type { UserResource } from '@clerk/react/types' (works from any SDK package)
  • ClerkProvider no longer forces dynamic rendering — pass the dynamic prop if needed
  • Cache components — when using Next.js cache components, place <ClerkProvider> inside <body>, not wrapping <html>
  • Satellite domains — new satelliteAutoSync option skips handshake redirects when no session cookies exist
  • Smaller bundles — React is now shared across framework SDKs (~50KB gzipped savings)
  • Better offline handling — getToken() now correctly distinguishes signed-out from offline states

Cross-References

  • Marketplace install and env var provisioning → ⤳ skill: marketplace
  • Middleware routing patterns → ⤳ skill: routing-middleware
  • Environment variable management → ⤳ skill: env-vars
  • Vercel OAuth (Sign in with Vercel) → ⤳ skill: sign-in-with-vercel

Official Documentation

Больше skills от openai

release
openai
Выпустите релиз Symphony, увеличив зафиксированную версию, закоммитив её, пометив объединённый коммит тегом и проверив рабочий процесс релиза Burrito. Используйте, когда вас просят…
signing-entitlements
openai
Проверка подписи кода, прав доступа, усиленного режима выполнения и проблем с Gatekeeper для приложений macOS. Используйте, когда требуется диагностировать ошибки подписи кода, отсутствующие права доступа…
building-ai-agent-on-cloudflare
openai
Создаёт AI-агентов на Cloudflare с использованием Agents SDK, включая управление состоянием, WebSockets в реальном времени, запланированные задачи, интеграцию инструментов и чат…
epigraphdb-skill
openai
Отправляйте компактные запросы к API EpiGraphDB для получения данных по онтологии, литературе, MR, генам-лекарствам и подтверждающим путям. Используйте, когда пользователю нужны краткие сводки EpiGraphDB.
runtime-behavior-probe
openai
Планируйте и проводите исследования поведения во время выполнения с помощью временных пробных скриптов, матриц валидации, контролей состояния и отчетов, ориентированных на результаты. Используйте только когда…
deep-security-scan
openai
Используйте, когда пользователь запрашивает глубокое, исчерпывающее, многопроходное или снижающее вариативность сканирование безопасности Codex по всему репозиторию или в заданной области. Выполняйте повторные независимые…
define-security-policy
openai
Определение, проверка или обновление рекомендаций SECURITY.md для репозитория или компонента. Используется, когда пользователь хочет уточнить, что Codex Security должен проверять, что выходит за рамки…
validation
openai
Используйте, когда Codex уже находится на этапе валидации сканирования безопасности или пользователь явно просит определить, являются ли одно или несколько кандидатных уязвимостей…