125. Sidebar: JSON Web Tokens
npm create vue@latest
위 https://jwt.io/ 페이지에 있는 Encoded된 토큰을
https://www.base64decode.org/ 이 사이트에서 decoded 하면
헤더와 payload가 decoded돼서 나온다.
https://www.base64decode.org/ 이 페이지에 Encode 버튼도 있다.
- jwt.io 페이지에있는 Encoded 값 복사 (eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c)
- base64decode.org 페이지 Decoded 탭 선택 > DECODED 클릭
- 결과값:
{"alg":"HS256","typ":"JWT"}{"sub":"1234567890","name":"John Doe","iat":1516239022}
- 결과값:
{"alg":"HS256","typ":"JWT"}
이 문자 그대로 복사해서 ENCODE // 그럼 위의 JWT의 헤더 부분과 동일한 값이 나옴 (eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9){"sub":"1234567890","name":"John Doe","iat":1516239022}
문자 그대로 복사해서 ENCODE // 위의 JWT payload 부분과 동일한 값이 나옴 (eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ==)
이번엔 JSON 웹 토큰(JSON Web Tokens, JWT)에 대해 설명하도록 하겠습니다.
- JSON 웹 토큰이란?: 인코딩된 문자열로 데이터를 담고 있으며, 클라이언트와 서버 간 데이터 전송에 사용됩니다.
- 토큰의 안전성: 토큰은 디지털 서명되어 있어, 해커가 토큰을 가로채더라도 데이터를 변경할 수 없습니다. 변경 시 토큰이 무효화됩니다.
- 토큰 생성 방법: 토큰은 백엔드에서 생성되며, 헤더(알고리즘 및 타입), 페이로드(데이터), 시그니처(검증용) 세 부분으로 구성됩니다.
- 토큰의 구조
- 헤더: 메타정보를 저장하며, 알고리즘과 토큰 타입을 포함합니다.
- 페이로드: 토큰의 내용으로, 다양한 데이터를 저장할 수 있습니다.
- 시그니처: 토큰 내용의 검증을 위해 사용되며, 가장 중요한 부분입니다.
- 토큰 보안: 토큰은 시크릿 키를 사용해 서명되므로, 이 키 없이는 토큰을 위조하기 어렵습니다.
- 토큰 도난 가능성과 대처 방법: 공공장소 등에서 토큰이 도난당할 수 있으나, SSL/TLS를 통한 데이터 암호화로 이를 방지할 수 있습니다.
- Firebase에서의 토큰 관리: Firebase는 사용자 인증을 위한 토큰을 생성하고 관리하며, 개발자 도구의 Application 패털에서 IndexedDB 스토리지 아래 Firebase Auth에서 확인할 수 있습니다.
이번엔 JSON 웹 토큰이 무엇이며 어떻게 생성되고, 보안 유지되는지에 대한 설명을 담고 있습니다.
또한, 웹 애플리케이션에서 이를 사용하여 안전한 사용자 인증을 구현하는 방법을 제시합니다.
- JSON 웹 토큰이란?: 데이터를 담고 있는 인코딩된 문자열로, 사용자 인증에 효과적이고 인기 있는 방법입니다. 클라이언트와 서버 간 데이터를 전송하는 데 사용됩니다.
- 토큰의 안전성: 토큰은 디지털 서명되어 있어, 해커가 데이터를 읽을 수는 있어도 변경할 수는 없습니다. 토큰의 변경은 자동으로 토큰을 무효화합니다. 이는 토큰 도난 시 피해를 제한합니다.
- Firebase에서의 토큰: Firebase에서는 토큰의 인코딩 및 디코딩을 처리합니다. 해커가 토큰을 가로채도 서명 없이는 데이터를 해독하기 어렵습니다. 또한 토큰은 한 시간 후 만료됩니다.
- 토큰의 생성: 토큰은 일반적으로 백엔드에서 생성되며, 세 부분으로 구성됩니다: 헤더, 페이로드, 시그니처.
- 헤더: 토큰에 대한 메타정보를 담고 있으며, 알고리즘과 토큰 타입을 포함합니다.
- 페이로드: 토큰의 내용으로, 다양한 데이터를 저장할 수 있습니다.
- 시그니처: 토큰의 내용을 검증하는 데 사용되며, 헤더와 페이로드, 시크릿 키를 기반으로 계산됩니다.
- 토큰의 보안: 시그니처 없이는 토큰을 위조하기 어렵습니다. 시크릿 키는 토큰의 가장 중요한 부분으로, 해커가 모든 것을 해독할 수 있어도 시크릿 키 없이는 토큰을 위조하기 어렵습니다.
- 토큰의 도난 가능성: 공공장소에서의 온라인 로그인 시 토큰이 도난당할 수 있습니다. 이는 토큰뿐만 아니라 클라이언트와 서버 간 전송되는 모든 데이터에 해당됩니다.
- 해커로부터 보호하는 방법: SSL/TLS는 클라이언트와 서버 간 데이터 전송을 암호화하는 표준입니다. 대부분의 호스팅 서비스는 SSL 인증서와 설치를 제공합니다.
- Firebase에서의 토큰 관리: 개발자 도구의 Application 패널에서 IndexedDB 스토리지 아래 Firebase Auth를 통해 사용자 정보와 함께 저장된 토큰을 확인할 수 있습니다.
이번엔 JSON 웹 토큰의 작동 원리와 보안성, 생성 방법에 대해 설명했으며, Firebase에서의 토큰 관리 방법에 대해서도 다뤘습니다.