인증 방식
테스트 가능백엔드: https://api.advt-dev.voidx.ai
변경 사항
- Bearer 방식에서 쿠키 방식으로 변경
- 미들웨어 인증에서 DAL 인증으로 변경
인증 + DAL 구현
// lib/auth.ts
import "server-only"; // 서버 전용 코드 보장
import { cache } from "react"; // 요청당 1회 실행 보장
import { cookies } from "next/headers";
import { redirect } from "next/navigation";
// JWT 페이로드에서 세션 정보 추출
// HttpOnly 쿠키로 XSS 공격 방지
export const getSession = cache(async () => {
const cookieStore = await cookies();
const token = cookieStore.get("access_token")?.value;
if (!token) return null;
// RS256 비대칭키 검증
// 백엔드의 JWKS 엔드포인트에서 공개키 조회
const session = parseJwtPayload(token);
if (isTokenExpired(session)) return null;
return session;
});
// 인증 필수 페이지용
// 미인증시 로그인 페이지로 리다이렉트
export const requireAuth = cache(async () => {
const session = await getSession();
if (!session) redirect("/auth-example/login");
return session;
});
// lib/dal.ts - Data Access Layer
// 모든 데이터 접근 지점에서 인증 검증
// 미들웨어 대신 DAL에서 보안 처리 (CVE-2025-29927 대응)
export async function getDashboard() {
await requireAuth(); // 인증 검증
return fetchWithAuth("/api/v1/admin/dashboard");
}
// 페이지에서 사용
// app/auth-example/private/page.tsx
export default async function PrivatePage() {
const data = await getDashboard(); // DAL 호출시 자동 인증 검증
return <div>{data.total}</div>;
}