[ TIL ] 인증(Authentication) & 인가(Authorization)

정순관·2025년 11월 13일
post-thumbnail
  • 인증 (Authentication) = 신원 확인 (로그인)
  • 인가 (Authorization) = 권한 부여 (접근 제어)

항상 인증은 인가보다 먼저 수행되어야 함!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

세션과 JWT

세션(Session)

  • 서버가 사용자의 로그인 상태를 기억하는 방식
  • 동작 흐름
    1.사용자 로그인 : 사용자가 아이디/비밀번호로 로그인을 시도
    2.세션 정보 생성 및 저장 : 서버는 로그인정보가 유효하면, 사용자를 위한 고유한 세션 ID를 생성하고 이 정보를 서버 메모리나 데이터베이스에 저장
    3.세션 ID 전송 : 서버는 생성된 세션 ID를 클라이언트(브라우저)에게 보내고, 브라우저는 보통 이 ID를 쿠키에 저장
    4.요청과 검증 : 이후 클라이언트는 서버에 요청을 보낼 때마다 쿠키에 담긴 세션 ID를 함께 보냄.
    서버는 이 세션 ID를 받아 저장된 세션 정보와 비교하여 사용자를 식별하고 요청을 처리함
  • 장점
    • 서버에서 모든 세션 정보를 관리하므로 보안에 유리하고, 특정 사용자를 강제로 로그아웃 시키는 등 제어가 쉽다.
    • 쿠키에 세션 ID만 저장하므로 클라이언트에 민감한 정보가 남지않는다.
  • 단점
    • 사용자가 많아질수록 서버의 메모리나 DB 부하가 커진다.
    • 확장성 문제

JWT(Json Web Token)

  • 서버가 로그인 상태를 저장하지 않는(stateless) 인증 방식
  • 서버가 상태를 저장하지 않으므로 JWT 자체에 모든 인증 정보가 담겨있다.
  • 동작 흐름
    1.사용자 로그인 : 사용자가 아이디/비밀번호로 로그인을 시도
    2.토큰 생성 및 전송 : 서버는 로그인 정보가 유효하면, 사용자의 정보와 권한, 만료 시간 등을 담은 암호화된 토큰(Access Token)을 생성하여 클라이언트에게 보냄. 서버는 이 토큰을 저장하지 않음
    3.토큰 저장 : 클라이언트는 전달받은 토큰을 로컬 스토리지나 쿠키에 저장
    4.요청과 검증 : 이후 클라이언트는 서버에 요청을 보낼 때마다 HTTP 헤더에 토큰을 실어 보냄. 서버는 이 토큰의 서명을 검증하여 유효성을 확인하고 요청을 처리
  • 장점
    • 무상태(Stateless) 및 확장성:
      서버가 토큰을 저장하지 않으므로 서버의 부하가 줄고, 여러 서버로 확장하기 용이함. 서버가 토큰을 저장하지 않아도 유저를 식별할 수 있는 이유는, JWT 자체에 모든 인증 정보가 담겨있기 때문
  • 단점
    • 유연성 :
      웹뿐만 아니라 모바일 앱 등 다양한 클라이언트 환경에서 사용하기 편리함.
      토큰 쿠키 등등
      알 수 없는 말들이 등장함
      물론 대충은 아는데
      딱 이거다!!! 하지는 못하니까 더 알아봐야겠고
      이제 과제도 바쁜데 큰일
      진짜 시작해야된다 이제
profile
으앙 ㅠ

0개의 댓글