
이번 외개인 프로젝트를 진행하면서 로그인 기능을 처음 개발해보았다. 여러 클라이언트 인증 방식이 존재하지만 우린 그 중에서 JWT 토큰 인증방식을 이용하여 로그인 기능을 구현하였다. JWT 토큰 인증 방식에 대해 공부해보고 내가 실제로 진행했던 과정을 보여드리면서 포스팅을 진행해보겠다.
토큰 기반 인증 방식이란 서버가 클라이언트에게 토큰을 발급하고, 이후 클라이언트가 서버에 요청할 때 받은 토큰을 이용하여 인증을 수행하는 방식이다.
JWT(JSON Web Token)는 클라이언트와 서버 간의 정보를 안전하게 전송하기 위해 사용되는 개방형 표준이다. 인증에 필요한 정보들을 암호화시킨뒤 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
실제로 전송할 데이터가 포함된다. 이 데이터는 클레임(claim)이라고 하며, 등록된 클레임, 공개 클레임, 비공식 클레임으로 나뉜다.
등록된 클레임: iss(발행자), exp(만료 시간), sub(주제) 등.
공개 클레임: 사용자 정의 클레임으로, 충돌을 피하기 위해 URI 형식으로 이름을 지정하는 것이 좋음
비공식 클레임: 애플리케이션에서 사용하는 임의의 클레임.
Header와 Payload는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작을 할 수 있다. 하지만 Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없어 토큰의 위변조 여부를 확인하는 데 사용된다.
Access Token은 사용자가 인증된 후, 특정 리소스나 API에 접근(즉, 전반적인 서비스 이용)할 수 있도록 허용하는 토큰이다. 보통 짧은 유효 기간을 가지며, 서버에 요청할 때마다 헤더에 포함되어야 한다.
Refresh Token은 Access Token이 만료되면 새로운 Access Token을 발급받기 위해 사용하는 토큰이다.
