[React]심화 - 인증 / 인가

안셩·2024년 9월 12일

복습내용

목록 보기
19/27
post-thumbnail

1. 인증, 인가의 개념

1) 인증(Authentication)

: 간단하게 로그인 과정!, 등록된 회원인지 확인하는 과정

2) 인가(Authorization)

: 로그인 후, 인증 받은 유저가 특정 서비스에 접근할 수 있는 권한이 있는지 확인하는 과정

3) HTTP 프로토콜 특징 2가지

  • 무상태성(stateless) : 각 요청이 독립적, 이전 요청의 상태나 정보를 기억하지 않음
  • 비연결성(connectionless) : 서버와 클라이언트가 연결되어 있지 않아, 최소한의 서버 자원으로 서버를 유지하게 함

2. 쿠키, 세션, 토큰

http의 무상태성, 비연결성 특징에도 불구하고 쿠키, 세션, 토큰이 있기에 로그인 상태가 계속 유지되고, 로그인 된 유저만 이용할 수 있는 서비스를 만들 수 있다.

1) 쿠키

  • 브라우저에 저장되는 작은 데이터 조각
  • 서버가 클라이언트에게 응답을 줄 때, Set-Cookie 속성으로 저정
  • Set된 쿠키는 자동으로 서버에 요청할 때 보내져서(단,동일한 Origin 또는 CORS를 허용하는 Origin에만), 마치 서버가 클라이언트의 상태를 기억하고 있는 것처럼 동작
	* Origin(출처) :  protocol + host + port
	* Cross Origin Resource Sharing(CORS) : 다른 출처에 리소스 요청하는 것을 허용하는 정책
  • 브라우저 역시 쿠키를 직접 추가/수정/삭제 가능
  • 외부 공격에 침범 받을 수 있다.

2) 세션을 이용한 인증방식

  • 세션 : 사용자-서버 간의 연결이 활성화된 상태 (=인증이 유지되는 상태, ex) 세션이 종료되었습니다.)

  • 로그인/회원가입 시 세션 인증
    : 로그인 성공 → 서버에서 세션 생성 및 저장(key-value 형식) → 쿠키에 key(sessionId)를 담아서 브라우저에 응답
    세션유지상태 : 서버에서 관리하는 세션 저장소에 회원 데이터가 있다.
    세션만료상태 : 서버에서 관리하는 세션 저장소에 회원 데이터가 없다.

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

  • 한계점
    확장성 문제 : 서버가 많아질 수록 세션 동기화 문제 발생
    메모리 사용량 증가
    상태유지 복잡성
    보안문제

3) 토큰을 이용한 인증방식

  • 토큰 : 클라이언트에서 보관하는 암호화 또는 인코딩된 인증 정보
    => 서버의 상태를 유지하지 않고도 클라이언트의 인증 상태를 확인할 수 있게 해줌
	암호화 : 기밀성을 유지하는 보안 목적, 복호화된 key 필요
    인코딩 : 데이터를 다른 형식으로 변환하여 전송 및 저장을 용이하게 하는 과정으로 데이터 처리 목적, 복호화된 key 필요
	복호화할 때 secret key 유무에 따라 암호화, 인코딩된 인증정보로 나뉨)
  • JWT(JSON Web Token) : 인코딩된 인증정보를 사용, 인증정보 보관이 필요없어 서버의 부담을 줄여준다.
    토큰 기반 인증방식에서 사용되는 특별한 토큰
    헤더(Header : 토큰 타입, 알고리즘) / 본문(Payload : 데이터 포함, 위조방지) / 서명(Signature : 서버만이 알 수 있는 비밀 키로 서명됨, 무결성 보장) => 3가지로 나뉨
profile
24.07.15 프론트엔드 개발 첫 걸음

1개의 댓글

comment-user-thumbnail
2024년 9월 14일

누구 인가

답글 달기