Authorization(인가)

고유·2022년 3월 8일
1

목록 보기
2/11

1. Authorization란?

서버에 자기 자신을 증명하기 위한 수단

1) 정의

  • 보통 로그인 유지, 사이트가 제공하는 기능을 사용할 권한이 있는지 체크하는 목적으로 쓰인다.
  • ex) 게시글 수정, 삭제 시 소유자가 맞는가?
  • 주로 토큰, 세션의 방법으로 구현된다.

2) 목적

  • 대부분의 웹은 HTTP 프로토콜을 사용한다.
  • HTTP는 한 번의 요청과 한 번의 응답으로 브라우저와 서버간 연결이 끊긴다.
  • 따라서 로그인을 했더라도 다른 요청이 있다면 다시 로그아웃 되버리는데 이 것을 해결하는 것이 인가(Authorization)이다.

2. 세션

쿠키에 저장

1) 정의

  • 사이트에 사용자 요청을 유지하기 위해 웹 서버에 정보를 저장하는 방법이다.
  • 브라우저를 닫는 등 연결 종료 시까지 연결된다.
  • 방문자가 웹 서버에 접속해 있는 상태를 세션이라고 한다.

2) 원리

  • 세션 정보는 서버 메모리 측에 저장되지만 세션DB를 구축했다는 가정 하에 설명

① 로그인을 통한 세션ID 수령

  • 유저가 로그인 요청을 하면 서버측에서 유저 데이터를 세션DB에 저장하고 세션ID를 떼서 응답으로 브라우저에게 보낸다.
  • 브라우저는 이 세션ID를 쿠키에 저장한다.

② 요청 시마다 세션ID를 동봉

  • 브라우저가 서버에 요청을 보내면 쿠키는 자동으로 이 요청에 세션ID를 싣어보낸다.

③ 확인

  • 서버는 이 세션ID를 받아 세션DB에서 일치하는 정보가 있는지 찾는다.
  • 있다면 로그인을 유지시키거나 해당 요청에 대한 (ex 게시글 수정) 권한이 있는지 확인한다.

3) 장점

  • 세션DB에 유저 정보를 저장하므로 밴하고 싶은 유저가 있으면 그 세션 정보를 지우면 된다.
  • 인스타그램을 예로 들면 로그인된 모든 디바이스를 확인할 수 있는데 원하지 않는 디바이스는 강제로 로그아웃 가능하다.

4) 단점

  • 매 요청마다 세션DB에서 유저 정보를 찾아야 되므로 조금 비효율적일 수 있다.
  • 서버를 여러개 둔 회사인 경우 유저가 1번 서버를 통해 로그인했을 때 추후 요청은 2번 서버로 가면 서버가 유저를 알아보지 못한다(공용 DB가 없다는 가정하에).

3. 토큰(JWT)

JWT, 웹 저장소에 저장

1) 정의

  • 세션과 같다.
  • 쿠키에 저장할 수도 있으나 웹 저장소(로컬 스토리지)에 저장할 수도 있다.
  • 토큰은 랜덤하고 긴 string으로 암호문처럼 보일 수 있으나 암호화되지 않았다(jwt.io)!

2) 원리

① 로그인을 통한 토큰 수령

  • 유저가 로그인 요청을 하면 서버는 유저의 정보(payload)를 받아서 privateKey로 사인하여 토큰을 만들어 낸다.
  • 역시 응답으로 브라우저에게 보내면 브라우저는 쿠키 or 웹저장소에 이를 저장한다.

② 요청 시마다 토큰을 동봉

  • 브라우저가 서버에 요청을 보낼 때 토큰을 싣어 보내게 한다.

③ 확인

  • 서버는 이를 받아 서버 자체에서 유효성 검사를 한다.
  • 서버가 만들었던 토큰과 토씨하나 안틀리고 일치하는가, 사인한 privateKey와 동일한 key로 확인하는가의 단계를 거치고 전부 맞다면 유저의 정보(payload)를 확인할 수 있다.

3) 장점

  • 세션과 달리 매번 DB를 확인할 필요없이 서버 자체에서 유효성 검사 가능

4) 단점

  • 토큰은 세션처럼 DB에서 삭제할 수 없어서 설령 탈취당하더라도 기간이 만료될 때 까지 유효하고 세션처럼 강제 로그아웃 시킬 수가 없다.

틀린 내용은 태클 걸어주세요!

profile
프론트엔드

0개의 댓글