소프트웨어-이야기/아키텍처
개발자를 위한 최소한의 인증 시스템 지식: Oauth2.0 + HTTP
americano_people
2023. 10. 14. 15:22
JWT
인증에 필요한 정보를 암호화한 Token이다.
JWT 구성을 살펴보자. JWT은 3가지 구성요소로 나뉜다. 각 구성영역은 토큰의 점으로 구분된다.
- header
- payload
- signature
JWT이 등장한 배경
요구사항
- 로그인을 하려면 아이디와 패스워드가 필요하다. 그리고 로그인을 일정 시간동안 유지해야한다.
- 아이디와 패스워드를 매번 보내주려면, 어딘가에 이 정보를 저장해야한다.
대안
(1) 아이디와 패스워드를 API를 요청할 때마다 전달하기
- 아이디와 패스워드를 사용자에게 매번 입력받는 것은 무리이다.
- 그래서 클라이언트 저장소에 아이디와 패스워드를 저장해서, 매번 전달해야한다.
- 쿠키에 아이디, 패스워드를 저장해서 전달하는 안이 있다.
- 그러나 개인 민감정보가 쿠키에 담겨있는 것은 보안상 안전하지 않다.
- 그리고 쿠키의 크기는 브라우저마다 제한되기 때문에 활용을 지양하는 것이 좋다.
(2) 세션 ID 사용하기
- 방법
- 클라이언트가 아이디/패스워드를 전달하여, 로그인을 시도한다.
- 서버는 클라이언트에 세션 ID를 발급한다.
- 클라이언트는 HTTP Header에 세션 ID를 담아서 전달한다.
- 서버는 세션 ID가 유효한지 인증 서버를 통해 확인한다.
- 인증 서버는 글로벌 캐시를 사용해 세션 ID를 관리한다.
- 단점
- 이 방법은 인증이 필요한 도메인 서버가 인증 서버에 항상 의존한다는 단점이 있다.
- 이는 응답지연, 단일 장애 포인트 (SPOF)를 일으킬 수 있다.
Oauth 2.0: JWT으로 Access Token을 만들어서, 인증하기
토큰 유효성 검증
- jwt payload의 exp (Expiration Time)을 사용해 토큰 만료 여부 판단
- jwt paylaod 안에서 회원 식별자를 구해옴
HTTP 통신 방법
HTTP 통신에서 인증을 하려면, Authorization header에 인증 타입과 인증 정보를 포함하여 요청을 전달하면 된다.
Authorization: <type> <credentials>
header 형태는 위와 같다.
인증 타입
HTTP 인증 방법은 크게 Basic과 Bearer으로 나뉜다.
Basic
Authorization: basic ID와_패스워드를_base64으로_인코딩한_값
Bearer
Authorization: Bearer OAUTH_인증으로_얻은_access_token
참고
https://brunch.co.kr/@jinyoungchoi95/1