1. 사용자 인증 방식


Trablock에서 사용자를 인증하는 방식으로 JWT 토큰을 이용합니다.

<aside>

  1. Authorization-Token

  2. Refresh-Token

유저 인증을 필요로 하는 API에 대해 헤더에 Authorization-Token을 포함시켜 요청합니다. 만약 Authorization-Token이 만료되었고 Refresh-Token이 유효하다면 새로운 Authorization-Token을 요청할 수 있습니다.

2. 쿠키 제어 및 보안


서버에서 받아온 토큰은 쿠키에 저장합니다. 모든 쿠키 제어는 서버를 통해 이루어집니다. 이처럼 클라이언트가 아닌 서버에서 쿠키를 제어했을 때 얻을 수 있는 주요 이점은 다음과 같습니다.

<aside>

  1. 클라이언트 측 노출 방지

  2. HttpOnly 설정

  3. CSRF(Cross-Site Request Forgery) 보호

  4. 중앙화된 쿠키 관리

사용자 인증과 관련된 정보를 다루는 만큼 보안이 매우 중요합니다. 따라서 다음과 같이 일관된 설정을 통해 예측 가능한 보안 위험으로부터 쿠키를 보호합니다.

<aside>

  1. secure: true

  2. httpOnly: true

  3. sameSite: 'strict'

import { cookies } from 'next/headers';

async function setCookie(name: string, value: string, options?: CookieOptions) {
  const securedOptions: CookieOptions = {
    ...options,
    secure: true,
    httpOnly: true,
    sameSite: 'strict'
  };
  cookies().set(name, value, securedOptions);
}

더보기) Next.js App Router에서 쿠키 관리 전략

3. 미들웨어 자동 검증


Trablock에는 사용자 인증을 필요로 하는 페이지가 있습니다. 만약 사용자 인증에 필요한 토큰에 문제가 있는 경우 로그인 페이지로 리디렉션합니다. 모든 페이지 진입 전 다음과 같은 로직으로 리디렉션 여부를 결정합니다.