본문 바로가기

카테고리 없음

Study_240612 ( 인증,인가 )

HTTP 프로토콜의 특징 2가지

무상태(stateless)

  • HTTP 프로토콜은 무상태(stateless) 프로토콜. 각 요청이 독립적이며, 서버가 이전 요청에 대한 정보를 기억하지 않는다는 의미. 클라이언트가 서버에 요청을 보낼 때마다 서버는 해당 요청을 독립적으로 처리하고, 이전 요청의 상태나 정보를 기억하지 않음
  • 상태값은 매 요청마다 클라이언트가 가지고 오기 때문에, 서버는 클라이언트의 상태를 별도로 기억할 필요없이 주문받은 대로 응답함
  • 무상태라는 특성 덕분에 동일한 서버를 여러개로 확장 가능

비연결성(connectionless)

  • 서버와 클라이언트는 연결되어 있지 않습니다. 서버 입장에서는 매번 새로운 요청
  • 비연결성으로 인해 최소한의 서버 자원으로 서버를 유지할 수 있게 해줌
  • 그러나, 각 사용자별 요청이 잦은 서비스의 경우 이러한 비연결성은 오히려 비효율적일 수 있음

쿠키

브라우저에 저장되는 작은 데이터 조각, key-value형태로 저장됨 ( 쿠키는 클라이언트에서 직접 추가/수정/삭제 가능 )

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

Origin 이란?

출처(origin) 이란 protocol + host + port 를 의미

CORS 란?

Cross Origin Resource Sharing(CORS)는 다른 출처에 리소스 요청하는 것을 허용하는 정책

브라우저는 보안상의 이유로 기본적으로 Same Origin Policy(SOP)를 원칙으로 하고 있지만, 서버와 클라이언트 각각 CORS 설정을 통해 상호합의된 웹사이트는 예외적으로 서로 다른 출처(Cross-Origin)임에도 API 요청이 가능

 

세션이란?

  • 세션이란 사용자와 서버 간의 연결이 활성화된 상태를 의미하는 개념 (또는 인증이 유지되고 있는 상태)
  • 로그인 성공 → 서버에서 세션 생성 및 저장(key-value 형식) → key(sessionId)를 브라우저에 응답(by 쿠키)
  • 하지만 확장성 문제 , 메모리 사용량 증가 , 상태 유지의 복잡성 , 보안 문제가 있음

쿠키 - 세션 인증방식

로그인/회원가입 성공 시 서버에서 쿠키에 sessionId를 담아서 보내줌

세션 유지 상태 : 서버에서 관리하는 세션 저장소에 회원 데이터가 있다.

세션 만료 상태 : 서버에서 관리하는 세션 저장소에 회원 데이터가 없다.

 

인가(Authorization) 필요한 API 요청/응답

서버는 인가가 필요한 API 요청을 받으면 클라이언트 쿠키에 들어 있는 sessionId를 세션 저장소에 조회하여 있으면 DB에 데이터를 조회하여 응답

 

토큰이란?

클라이언트에서 보관하는 암호화 or 인코딩된 인증 정보를 의미. 서버의 상태를 유지하지 않고도 클라이언트의 인증 상태를 확인 가능.

  • 세션처럼 서버에서 사용자의 인증 정보를 보관할 필요가 없기 때문에 서버 부담을 줄여주는 인증 수단
  • 웹에서 인증 수단으로 사용되는 토큰은 주로 JWT (Json Web Token) 을 이용. 위 설명에서 토큰은 암호화 또는 인코딩 된 인증정보

JWT란? 아래 3개로 구분이 되며 , 데이터 정보는 payload에 들어감.

정보(payload)를 토큰화할 때 signature에 secret key가 필요하고, secret key는 복호화가 아니라 토큰이 유효한 지를 검증하는 데 사용

  1. 헤더(Header): 어떤 종류의 토큰인지와 어떤 알고리즘으로 서명되었는지에 대한 정보가 있음
  2. 본문(Payload): 실제로 중요한 데이터가 들어있는 부분. 사용자 ID, 토큰의 만료 시간 등이 여기에 포함 ( 비밀번호 등 민감한 정보는 넣지 않음 )
  3. 서명(Signature): 이 부분은 토큰이 위조되지 않았는지 확인하는 역할. 서버만이 알 수 있는 비밀 키로 서명. 이 서명 때문에 토큰의 무결성이 보장.

로그인/회원가입 시 토큰 인증

인가(Authorization) 필요한 API 요청/응답