Developer Note/국비과정 수업내용 정리&저장

24년 12월 5일

DH_PARK 2024. 12. 15. 15:41

JWT 토큰에 관한 용어

- 액세스 토큰(Access Token) : 사용자나 컴퓨터 프로그램이 접근할 권리를 증명하는데 사용되는 문자열이며 , 일반적으로 인터넷 웹에서 사용자 인증 및 권한 부여를 위해 주로 사용된다.

예를 들어보자면 , 소셜미디어 플랫폼이나 웹사이트에서 사용자가 로그인을 할 때 서버에서 사용자의 인증 정보를 확인한 후 엑세스 토큰을 발급해준다. 그리고 사용자가 이후 서비스를 이용할 때마마 이 토큰을 사용하여 자신의 인증상태를 증명하게 된다.

 

- 리프레쉬 토큰(Refresh Token) : 엑세스 토큰만을 사용하게 되면 짧은 유효기간 때문에 사용자는 로그인을 자주 해야돼서 자꾸 새롭게 토큰을 발급받아야 하는 단점이 있다. 그렇다고 유효기간을 길게 해버리면 토큰을 탈취당했을 때 큰 보안문제가 생길 수 있기 때문에 보안성에 문제가 생긴다.

 

이 때 토큰을 재발급하는 역할만을 담당하는 토큰을 생성해서 관리하게 되는데 이것이 리프레쉬 토큰 이다.

사용자가 로그인을 할 때 DB에서 ID와 PW를 비교해서 로그인을 하게 되는데 , 이 때 로그인에 성공한다면 토큰을 발급하는데 , 이 때 엑세스토큰과 리프레쉬 토큰을 같이 발급한다. 이 때 회원 DB에도 레프레쉬 토큰을 저장해둔다.

(DB는 Redis 같은 인메모리 DB를 사용한다.)


JWT 와 엑세스 토큰의 비교

JWT 와 엑세스 토큰이 같은 거라고 생각을 했는데 약간은 다른 점이 있었다.

JWT는 엑세스 토큰을 구현하는 방식 중 하나라고 한다.

구분  JWT (JSON Web Token)  액세스 토큰 (Access Token)
정의 JSON 객체를 사용하여 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 방식입니다. 사용자가 인증을 완료한 후 자원에 접근할 수 있는 권한을 부여받는 데 사용되는 크리덴셜(증명 정보)입니다.
사용 목적 인증 및 정보 교환에 주로 사용됩니다. 정보가 디지털 서명되어 있어 정보의 무결성을 보장합니다. 사용자가 시스템이나 네트워크 리소스에 접근할 수 있는 권한을 증명하는 데 사용됩니다.
형태 JWT는 특정 형식(JSON)을 가지며, 세 부분(헤더, 페이로드, 시그니처)으로 구성됩니다. 형태가 정해져 있지 않으며, 문자열, JWT, 다른 형식의 토큰 등 다양한 방식으로 구현될 수 있습니다.
내용 발급자, 만료 시간, 주제 등 사용자와 관련된 정보를 포함할 수 있습니다. 일반적으로 사용자의 식별 정보나 권한 범위 등 인증 후 접근 권한에 대한 정보를 포함하지만, 구체적 내용은 구현에 따라 다릅니다.
사용 예시 OAuth에서 액세스 토큰으로 사용될 수 있으며, 또한 정보 교환의 수단으로도 사용될 수 있습니다. 웹 애플리케이션, API 접근 권한 부여, 소셜 미디어 로그인 등 다양한 인증 시스템에서 사용됩니다.
보안 정보가 디지털 서명되어 있어, 정보의 무결성 및 변조 방지를 제공합니다. 암호화를 통해 정보를 보호할 수도 있습니다. 보안 수준은 구현 방식에 따라 다르며, JWT나 다른 안전한 방식으로 구현될 수 있습니다.

 

간단히 생각해보자면 , 엑세스 토큰은 사용자가 인증에 성공하고 나서 특정 자원에 접근할 수 있는 권한을 부여받는데 사용되는 증명정보(크리덴셜,credential) 이다.


 

그러면 스케줄드에서 토큰을 만료시키는게 시간이 아니라 특정 조건에서 초기화를 시키게 할 수도 있나 ?

그냥 창을 닫았을 때 라던가 그런 조건에서 …

알아보니 그건 안된다고 한다. JWT 가 기본적으로 Stateless 한 방식이고 만료 시간의 기본 동작원리 때문에 직접적으로 구현하기 힘들다고 함.


리프레쉬 토큰을 만료하는 방법

  • 로컬 스토리지 사용방법
    • 자바스크립트를 사용해 키 - 값 형태로 데이터를 저장한다.
    • 브라우저를 종료해도 데이터가 유지된다.
    • XSS 공격에 취약하다.
  • 쿠키를 사용한 토큰 만료 방법
    • 브라우저와 서버 간 데이터를 교환하기 위해 사용하한다.
    • 요청 시 자동으로 쿠키 데이터를 키 - 값 형태로 서버로 전송한다.
    • 쿠키에 HttpOnly 속성을 설정하면 자바스크립트로 접근이 불가능하다(XSS방지)

보통은 쿠키를 사용하는 방법을 더 권장한다고 한다. (보안 옵션을 활용하면 민감한 데이터를 안전하게 저장할 수 있기 때문이라고 함 !)

보안상 문제 때문에 최소한의 만료 기간이 필요함.

서버에서 이 리프레쉬 토큰값을 보관하면 길게유지해도 되는데

같이 전달하면 뭐 짧게 유지하는게 좋다고함 .


XSS 공격( Cross -Site Scripting )이란?


액세스 토큰을 넣고 빼고 하는작업은 비즈니스 로직 선에서 처리하는거라고 한다.

그래야 트랜잭션 처리를 할 수 있기 때문이다.

근데 , 토큰을 발급하는것 까지는 뭐 알겠다고 치겠는데 , 대체 이 토큰이 어디에 사용되고 왜 사용되는지 이해가 잘 되지 않았다. 예를 들어 특정 사이트에 로그인을 하면 그냥 계속 로그인 상태가 유지되는게 당연한것 아닌가 ? 라고 생각을 했기 때문이다. 그래서 이 토큰이라는게 왜 필요하고 어떨 때 사용되는 것인지 알아보았다.

알아보니 HTML 은 Stateless 프로토콜이기 때문에 브라우저가 페이지를 이동하거나 새로고침하게 되면 , 서버는 사용자가 누구인지를 알지 못하는 상태가 된다고 한다. 그래서 서버는 이런 매 요청마다 사용자를 식별할 수 있는 인증정보를 확인해야 하게 되는데 이때 엑세스 토큰이 사용된다고 한다.

결론적으로는 “로그인 상태를 유지” 하는데에도 계속해서 인증이 필요하고 이 때 엑세스 토큰과 리프레시 토큰이 사용되는 것이다 !

'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글

24년 12월 9일  (1) 2024.12.18
24년 12월 6일  (2) 2024.12.15
24년 12월 4일  (0) 2024.12.15
24년 12월 3일  (0) 2024.12.15
24년 12월 2일  (2) 2024.12.10