Basic 인증
- 모든 HTTP 요청에 아이디와 비밀번호를 같이 보내는 방법
- HTTP 요청 헤더의 Authorization 부분에 아이디와 비밀번호를 콜론으로 이어 붙인 후 인코딩한 문자열을 함께 보낸다.
- 서버는 디코딩을 통해 아이디와 비밀번호를 찾아낸 후, DB나 인증 서버의 레코드와 비교한다.
- 일치하면 요청 받은 일을 수행하고, 일치하지 않으면 거부한다.
문제점
- 디코더만 있으면 누구나 디코딩해 원래의 아이디와 비밀번호를 확인할 수 있다.
- 따라서 HTTPS와 사용해야 한다.
- 유저를 로그아웃시킬 수 없다.
- 모든 요청이 일종의 로그인 요청이기 때문이다.
- 인증 서버와 인증DB에 과부하가 걸릴 확률이 높다. (스케일 문제)
토큰 기반 인증
- 최초 로그인 시 서버가 토큰을 만들어 반환한다.
- 클라이언트는 이후 요청에 아이디와 비밀번호 대신 토큰을 넘겨서 인증한다.
- 요청 헤더에 Authorization: Bearer Token을 명시한다.
- 서버는 헤더의 토큰과 서버의 토큰을 비교해 인증한다.
Basic과의 차이점
- 아이디와 비밀번호를 매번 보내지 않으므로 조금 더 안전하다.
- 사용자의 인가 정보, 유효기간을 정해 관리할 수 있다.
- 토큰은 서버가 마음대로 생성할 수 있기 때문이다.
- 디바이스마다 다른 토큰을 생성해주고 유효기간을 다르게 정해서 임의로 로그아웃할 수도 있다.
문제점
JSON Web Token
전자 서명된 토큰을 이용해 스케일 문제를 해결한다.
이렇게 전자 서명된 토큰 중 하나가 바로 JWT(JSON Web Token)이다.
JWT란?