Trablock에서 사용자를 인증하는 방식으로 JWT 토큰을 이용합니다.
<aside>
Authorization-Token
userId - 사용자 idexp - 토큰 만료 시간 (24시간)Refresh-Token
Authorization-Token 재발급userId - 사용자 idexp - 토큰 만료 시간 (14일)
</aside>유저 인증을 필요로 하는 API에 대해 헤더에 Authorization-Token을 포함시켜 요청합니다. 만약 Authorization-Token이 만료되었고 Refresh-Token이 유효하다면 새로운 Authorization-Token을 요청할 수 있습니다.
서버에서 받아온 토큰은 쿠키에 저장합니다. 모든 쿠키 제어는 서버를 통해 이루어집니다. 이처럼 클라이언트가 아닌 서버에서 쿠키를 제어했을 때 얻을 수 있는 주요 이점은 다음과 같습니다.
<aside>
클라이언트 측 노출 방지
HttpOnly 설정
CSRF(Cross-Site Request Forgery) 보호
중앙화된 쿠키 관리
사용자 인증과 관련된 정보를 다루는 만큼 보안이 매우 중요합니다. 따라서 다음과 같이 일관된 설정을 통해 예측 가능한 보안 위험으로부터 쿠키를 보호합니다.
<aside>
secure: true
httpOnly: true
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);
}
Trablock에는 사용자 인증을 필요로 하는 페이지가 있습니다. 만약 사용자 인증에 필요한 토큰에 문제가 있는 경우 로그인 페이지로 리디렉션합니다. 모든 페이지 진입 전 다음과 같은 로직으로 리디렉션 여부를 결정합니다.