JWT 3

JWT와 토큰 생성, 강제 로그아웃에 대하여

JWT가 등장한 이유 기존에는 유저의 로그인 상태, 권한 등에 대한 정보를 파악하기 위해 로그인 시 '세션' 이라는 데이터 구조를 생성해 서버에 저장하고, 세션ID를 쿠키에 담아 클라이언트에게 전달해 주는 방식을 취해왔다. 그래서 로그인 상태를 파악하려면 세션ID를 서버에 전달해서 필요한 정보를 확인하는 흐름을 가졌다. 해당 방식은 서버에서 세션을 유지해야 함(stateful)을 의미하는데 이는 서버 메모리, 데이터베이스 혹은 메모리 캐시와 같은 저장소에 보관되었다. 이는 동시 접속 유저 수가 증가할수록 세션 정보를 조회하거나 상태 변경을 위한 요청 횟수가 증가함을 의미하고, 이는 곧 CPU, 메모리 자원 소모가 증가함을 의미한다. 또한 유저 수가 증가하면서 서비스의 규모가 증가하면 서버와..

JWT 모듈을 통한 로그인, 인증기능 구축 (2)

Refresh Token What is Refresh Token? 로그인 후 생성된 토큰을 사실 Access Token이라 부른다. 실제로는 Access Token에 대하여 유효기간을 지정해서 사용해야 한다. 그 이유는 해커와 같은 제 3자에게 악의적인 용도로 Token이 탈취된다면 유저가 재로그인을 한다 해도 기존에 생성된 토큰이 유효하기 때문에 보완상 위험에 처하게 되기 때문이다. 하지만 만약 Access Token의 유효기간이 매우 짧게 설정되어 있다면 유저는 매번 재로그인을 시도해야 하고, 반대로 너무 길게 설정되어 있다면 보완상 의미가 없어진다. 금융 관련 서비스 이용 시에는 유저가 번거롭더라도 유효기간을 짧게 하는 것이 타당할 수 있지만 그 외의 경우에는 적절한 타협점을 찾아야 하는 어려움이 ..

JWT 모듈을 통한 로그인, 인증기능 구축 (1)

로그인, 인증 기능 구축을 위한 기능 인증기능이 왜 필요할까? 서버가 클라이언트로부터 어떠한 정보를 요청받았을 때 해당 클라이언트가 누구냐에 따라 응답 데이터가 달라지거나 또는 제공해서는 안되는 보완적인 절차가 필요한 경우가 있기 떄문이다. 가령 A 유저에게 B 유저에 대한 개인정보, 플레이리스트, 결제내역 등을 보여줘서는 안되기 때문이다. 이러한 클라이언트 구분을 위해 로그인 시스템이 존재한다. 최초 로그인 시 클라이언트는 로그인 정보를 body에 담아 전달하면 서버는 그것을 내장 시크릿 키와 잘 버무려 토큰 이라는 hashing text를 생성하여 클라이언트에게 제공해준다. 이 토큰은 곧 인증서 역할을 한다. 그래서 클라이언트는 로그인한 후 해당 사이트에서 여러가지 요청(게시글 보기, 플레이리스트 보..