[React] 인증 & 인가

Hyowmls·2024년 6월 12일
0
post-thumbnail
post-custom-banner

인증 - Authentication

서비스를 이용하려는 유저가 등록된 회원인지 확인하는 절차

  • 로그인 과정

인가 - Authorization

인증을 받은 유저가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 절차

  • 로그인이 일어난 이후의 과정

쿠키

브라우저에 저장되는 작은 데이터 조각이며 key-value 형태로 저장된다

  • HTTP의 무상태성과 비연결성 특성에도 불구하고, 쿠키를 사용하여 마치 서버가 클라이언트의 인증 상태를 기억하는 것처럼 구현할 수 있다
  • 쿠키는 별도로 삭제 처리하거나 유효기간이 만료되지 않는 한, 서버와 통신할 때 자동으로 주고 받는다
  • 서버에 특정 API를 요청 했을때 서버가 응답시 헤더에 Set-Cookie 속성으로 쿠키 정보를 담아주면, 응답 받은 브라우저는 쿠키를 브라우저에 자동으로 저장한다
    ❗️ 개발자도구 - 애플리케이션 - 저장용량 - 쿠키에서 확인 가능

세션

사용자와 서버 간의 연결이 활성화된 상태를 의미한다

  • 로그인 성공 - 서버에 세션 생성 및 저장(key-value 형식) - key(sessinID)를 브라우저에 응답

세션 인증의 한계

  • 확장성 문제
    세션 정보는 서버의 메모리나 저장소에 저장되기 때문에, 서버가 많아질수록 세션 동기화 문제가 발생한다

  • 메모리 사용량 증가
    많은 사용자가 접속할 경우, 각 사용자의 세션 정보를 서버 메모리에 저장하는 방식은 메모리 사용량이 급증하게 된다

  • 상태 유지의 복잡성
    세션은 서버에 상태를 저장하므로 서버가 무상태로 유지되기 어렵다. RESTful 아키텍처의 원칙과 맞지 않는다

  • 보안 문제
    세션 ID가 탈취될 경우 이를 통해 사용자의 세션을 가로채는 세션 하이재킹 공격이 발생할 수 있다

토큰

클라이언트에서 보관하는 암호화 또는 인코딩된 인증 정보를 의미한다

  • 암호화
    데이터를 특정 알고리즘으로 변환하여 인가된 사용자만이 읽을 수 있도록 하는 과정
  • 인코딩
    데이터를 다른 형식으로 변환하여 전송 및 저장을 용이하게 하는 과정

JWT - JSON Web Token

토큰 기반 인증 방식에서 사용되는 토큰으로 3가지 개념이 있다

  • 로그인한 사용자가 이후에 서버에 요청을 보낼때 사용된다
  • 헤더 Header
    어떤 종류의 토큰인지와 어떤 알고리즘으로 서명되었는지에 대한 정보가 들어간다
  • 본문 Payload
    실제로 중요한 데이터가 들어가는 부분이다
    ex). 사용자 ID, 토큰의 만료 시간 등
  • 서명 Signature
    토큰이 위조되지 않았는지 확인하는 역할을 한다
    서버만이 알 수 있는 비밀키로 서명되어 있다

JWT 특징

  • 국제 인터넷 표준 인증 규격 중 하나이다
  • 인코딩된 토큰을 누구나 복호화하여 payload를 볼 수 있다
  • 정보를 토큰화 할 때 signature에 secret key가 필요하고 secret key는 복호화가 아니라
    토큰이 유요한지 검증하는데 사용한다
post-custom-banner

0개의 댓글