본문으로 바로가기

 

웹 개발을 하면서 '인증'을 어떠한 방법으로 해야할까 고민해보았다.

Firebase 는 방법이라기보다는 툴에 더 가까운것 같지만 넣어두었는데(Firebase 도 토큰 기반 인증을 이용할 수 있으므로), 어쨌든 인증 기능에 대한 한 가지 방법이므로 넣었다.

조금이라도 금전적인 지원이 가능하다면 Firebase 를 backend 로 사용하는게 좋아보인다.

 

 

1. FireBase (Google)

  • Baas(Backend as a Service), 백엔드/서버 측 코드를 작성하지 않고 클라우드와 연동해 응용 프로그램을 효율적으로 개발할 수 있는 환경을 제공하는 것 
  • 실시간 데이터베이스, 사용자 인증, 클라우드, 호스팅, 오류 보고, 광고 수익 등의 기능을 제공
  • 하지만 무료 요금제는 프로젝트 당 하나의 데이터베이스만 사용할 수 있다. (개인적으로 지금 걸리는 단점)

 

2. Cookie & Session

  • 서버에서는 세션을 이용해 인증을 책임지고, 사용자는 쿠키를 이용해 쿠키를 받아 세션의 정보를 접근하는 인증 방식
  • 기본적으로 세션 저장소를 필요로 함(서버 부하가 높아짐)
  • 사용자의 HTTP 요청을 가로채서, 훔친 쿠키를 이용해 HTTP 요청 가능(세션 하이재킹)

 

3. JWT (Json Web Token)

  • JWT 는 웹표준(RFC7519)으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적(self-contained) 방식으로 정보를 안정성 있게 전달함 (자가수용적은 아래 더보기 참고)
더보기

* 자가수용적이란?

JWT 는 필요한 모든 정보를 자체적으로 지니고 있다. JWT에서 발급된 토큰은

1. 토큰에 대한 기본정보

2. 전달할 정보

3. 토큰 검증 증명 정보 (signature)

를 포함한다. 

  • JWT 는 서버/클라이언트 정보 전달 시 Http 헤더에 JSON 토큰을 넣은 후,
    - 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증함
  • 세션/쿠키와 같이 별도의 저장소 관리가 필요하지 않음
    - 상태를 저장하지 않기때문에 서버를 확장하거나 유지/보수한데 유리함
    - 데이터베이스에 의존하지 않은 쉬운 인증/인가 방법 제공 
  • 토큰 기반 다른 인증 시스템에 접근이 가능하므로 확정성이 뛰어남
  • 이미 발급된 JWT 는 유효기간이 만료될때까지 사용할 수 있기 때문에, 토큰을 탈취당하면 정보가 계속 유출됨
    - Referesh Token 으로 어느정도 보완 가능
  • 토큰은 클라이언트에 저장되기 때문에, 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용이 불가능
  • Paylaod 정보가 제한적임 ( 클라이언트의 중요한 정보는 넣을 수 없음 )
  • 거의 모든 요청에서 토큰이 생성되므로, 데이터 트래픽 크기에 영향을 미칠 수 있음

 

* 어떤 환경에서 JWT 를 사용해야 하는가?

  • 회원 인증 : JWT 를 사용하는 가장 기본 시나리오
    - 서버에서는 사용자에 대한 세션을 유지할 필요가 없음. ( 사용자의 로그인 여부를 신경 쓸 필요가 없음 )
    - 서버는 클라이언트 요청 시 토큰 확인만 하므로, 서버 자원과 비용 절감 가능
  1. 클라이언트 로그인 
  2. 서버는 클라이언트 요청을 받을때 마다, 토큰이 유효하고 인증되었는지 검증하고
    요청한 작업에 권한이 있으면 작업을 처리함
  • 정보 교류 : JWT 는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋음
    - 정보에 서명에 되어있기 때문에 정보 보낸이/내용의 조작 여부를 검증 가능

 

 

1. Firebase 참고

helloworld-88.tistory.com/17

 

[Firebase] Firebase란?

Firebase란 단어를 처음듣는 사람도 있을것이다. 나 또한 앱개발 공부를 하며 Firebase란 단어를 처음 들어봤다. 사실 Firebase 를 들었을때 Firefox 와 관련이 있나 했지만 사실 알아보니 구글에서 Firebas

helloworld-88.tistory.com

2. JWT 참고

tansfil.tistory.com/58

 

쉽게 알아보는 서버 인증 1편(세션/쿠키 , JWT)

앱 개발을 처음 배우게 됐을 때, 각종 화면을 디자인해보면서 프론트엔드 개발에 큰 흥미가 생겼습니다. 한때 프론트엔드 개발자를 꿈꾸기도 했었죠(현실은 ...) 그러나 서버와 통신을 처음 배

tansfil.tistory.com

 

velopert.com/2389

 

[JWT] JSON Web Token 소개 및 구조 | VELOPERT.LOG

지난 포스트에서는 토큰 기반 인증 시스템의 기본적인 개념에 대하여 알아보았습니다. 이 포스트를 읽기 전에, 토큰 기반 인증 시스템에 대해서 잘 모르시는 분들은 지난 포스트를 꼭 읽어주세

velopert.com

www.opennaru.com/opennaru-blog/jwt-json-web-token/

 

JWT (JSON Web Token) 이해하기와 활용 방안 - Opennaru, Inc.

JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.

www.opennaru.com