Iron Session의 원리

SteadySlower·2024년 12월 17일
0

Javascript Libraries

목록 보기
1/1
post-thumbnail

iron-session 라이브러리를 사용해서 Authentication을 구현하는 것을 배우고 있다. iron-session은 쿠키와 세션을 결합해서 안전하게 데이터를 관리하는 javascript library이다. 다만 iron-session은 이름에는 session이 들어가지만 실제로 데이터는 암호화된 형태로 쿠키에 저장된다.

나도 처음에 iron-session은 이름이 session이니까 서버에 데이터가 저장되는 것으로 알고 있었다. 하지만 구현되는 코드를 보면 session이 아니라 cookie를 이용하는 것 같아서 원리를 알아보았다.


iron-session의 동작 원리

  1. 데이터 저장 위치
    • iron-session세션 데이터를 서버에 저장하지 않는다. 대신 쿠키에 암호화된 형태로 데이터를 저장한다.
  2. 데이터 암호화
    • 쿠키에 저장되는 데이터는 AES-GCM과 같은 강력한 암호화 알고리즘을 사용해 암호화되므로 평문으로 노출되지 않는다.
    • 쿠키에 저장되지만 데이터를 읽으려면 서버 측의 암호화 키가 필요하다.

결론: 쿠키에 저장

iron-session에서 세션 객체에 저장된 데이터는 결국 암호화된 형태로 클라이언트의 쿠키에 저장된다.

서버에서는 쿠키를 읽고 암호를 해독해서 세션 데이터를 복원하는 방식으로 작동한다.

즉 이름만 session이지 cookie를 사용하는 방식이다! (속았다!!!)


iron-session 예제 (로그인)

import { getIronSession } from "iron-session";

export default async function handler(req, res) {
  const session = await getIronSession(req, res, {
    cookieName: "mySession",
    password: process.env.SECRET_COOKIE_PASSWORD, // 암호화에 필요한 key
  });

  // 세션 객체에 데이터 추가
  session.user = { id: 1, name: "홍길동" };

  // 세션 저장
  await session.save();

  res.send({ message: "User Login" });
}

설명

  1. session.user 객체를 저장한다.
  2. session.save()를 호출하면 이 데이터는 암호화되어 쿠키에 저장된다.
  3. 쿠키를 서버가 다시 읽으면 getSession을 통해 복호화된 데이터를 가져올 수 있다.

장점

  • 서버에 저장소가 필요 없다: 세션 데이터를 쿠키에 저장하므로 서버 스토리지 비용이 줄어든다.
  • 보안: 쿠키에 암호화된 형태로 저장되므로 안전하다. 서버의 암호화 키 없이는 데이터를 읽을 수 없다.

단점

  • 데이터 크기 제한: 브라우저 쿠키의 최대 크기 제한인 4KB를 초과하지 않아야 한다.
  • 데이터 노출 가능성: 쿠키를 탈취당하면 복호화 키가 없다 하더라도 유출될 위험이 존재하므로, 쿠키 보안을 강화해야 한다 (Secure, HttpOnly 설정).

결론적으로, iron-session의 데이터는 암호화된 형태로 쿠키에 저장되며, 서버는 이를 복호화해서 세션처럼 사용할 수 있다.

profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글