세션 기반 인증 (로그인 / 로그아웃)

young·2022년 7월 17일
0

Learn more

목록 보기
12/22

Session

세션기반 인증 (Session-based Authentication)

사용자가 인증에 성공한 상태 = Session

✔️ 로그인

사용자가 정확한 아이디와 비밀번호를 입력하면 서버는 인증에 성공했다고 판단한다.
이후 인증을 필요로 하는 작업을 요청할 경우 (마이페이지 접속 등) 로그인 과정을 생략한다.
=> 인증에 따라 리소스의 접근 권한이 달라진다.

  • 서버는 사용자가 인증에 성공했음을 알고 있어야 한다.
  • 클라이언트는 인증 성공을 증명할 수단을 갖고 있어야 한다.
  • 서버는 일종의 저장소에 세션을 저장한다.
    주로 in-memory 또는 세션 스토어에 저장한다.
  • 세션이 만들어지면 각 세션을 구분할 수 있는 세션 아이디가 만들어진다.
    클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다.

쿠키는 서버에서 발급한 세션 아이디를 (암호화하여) 저장한다.
웹 사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용한다.
세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있으며, 서버는 세션을 저장한다.


✔️ 로그아웃

  • 서버는 세션 정보를 삭제해야 한다.
  • 클라이언트는 쿠키를 갱신해야 한다.

서버는 클라이언트의 쿠키를 임의로 삭제할 수 없다.
대신 set-cookie로 클라이언트에게 쿠키를 전송할 때 세션 아이디의 키값을 무효한 값으로 갱신할 수 있다.

💡 쿠키는 인증 성공에 대한 증명을 가지고 있으므로, 탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단한다. 그렇기 때문에 공공 PC에서는 반드시 로그아웃 해야한다.

express-session

세션을 관리해주는 node.js의 모듈 (미들웨어)
express 서버에서 쉽게 세션을 위한 공간을 다룰 수 있도록 만들어준다.


const express = require('express');
const session = require('express-session');

const app = express();

app.use(
  session({
    secret: '@codestates', //세션 아이디 생성
    resave: false,
    saveUninitialized: true,
    cookie: {
      domain: 'localhost',
      path: '/',
      maxAge: 24 * 6 * 60 * 10000,
      sameSite: 'none',
      httpOnly: false,
      secure: true,
    },
  })
);

쿠키로 전송된 세션 아이디는 고유한 세션 객체를 가지며 이는 서버에 저장된다.
세션 객체는 유저별로 독립적으로 생성된 객체이다.

세션 객체는 req.session으로 접근할 수 있으며 이를 통해 세션에 임의의 데이터를 저장하거나 불러올 수 있다.




https://github.com/expressjs/session#reqsession

profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지

0개의 댓글