프로그래밍 개념 정리

임시 JWT 비교

Dr.Mlem 2025. 4. 11. 13:47

아주 좋은 질문이야!
너가 지금 사용하고 있는 JWT 구조와 검증 방식을 정리하고,
보통의 일반적인 정적(secret key 고정) 방식비교해서 알려줄게.


✅ 너의 JWT 구조 (동적 secret key 사용)

🧩 JWT 구성 요소

json
복사편집
Header: { "alg": "HS256", "typ": "JWT" } Payload: { "id": "사용자 ID", "name": "사용자 이름", "jti": "랜덤으로 생성된 고유 UUID", "exp": "만료 시간" } Signature: HMAC-SHA256(header.payload, secretKey from Redis[jti])

🔐 너의 검증 흐름 요약

1️⃣ 클라이언트가 JWT를 보냄
2️⃣ 서버는 먼저 jwt.ParseUnverified()로 jti만 추출
3️⃣ Redis에서 jti로 secret key를 조회
4️⃣ 조회된 secret key로 jwt.Parse()로 서명 검증
5️⃣ 검증 성공 시 claims 반환, 실패 시 에러 반환


✅ 특징 (너의 구조)

항목설명
🔄 Secret Key 사용자 로그인마다 UUID로 랜덤 생성
🧠 저장 위치 Redis: jti → secret
🔐 보안성 사용자마다 서명이 다름 → 토큰 탈취 방지에 강함
🛑 단점 Redis 장애 시 검증 불가 / 관리 포인트 증가

🆚 일반적인 JWT 구조 (고정 secret key 사용)

🧩 JWT 구성 요소

json
복사편집
Header: { "alg": "HS256", "typ": "JWT" } Payload: { "id": "사용자 ID", "name": "사용자 이름", "exp": "만료 시간" } Signature: HMAC-SHA256(header.payload, 고정된 secretKey)

🔐 일반적인 검증 흐름

1️⃣ 클라이언트가 JWT를 보냄
2️⃣ 서버는 미리 정해둔 고정된 secret key로 jwt.Parse() 호출
3️⃣ 서명 검증 성공 시 claims 반환


✅ 특징 (고정 secret key 방식)

항목설명
🔒 Secret Key 전체 사용자에 대해 하나의 고정 값
💾 저장 위치 Go 코드 안에 상수 or 환경변수
⚙️ 구현 코드가 단순하고 Redis 같은 외부 의존 없음
⚠️ 보안 Secret이 노출되면 모든 사용자 토큰이 위험

🔍 비교 요약

비교 항목너의 구조 (UUID + Redis)일반적인 구조 (고정 secret key)
Secret 관리 사용자마다 별도 UUID → Redis에 저장 하나의 고정 SecretKey
JWT 생성 로그인 시마다 새로운 key 생성 항상 같은 key 사용
JWT 검증 jti → Redis → Parse() secretKey로 Parse()
보안성 ✅ 사용자 단위로 보호 가능 ⚠️ 전체 키 노출 시 전체 위험
구현 복잡도 ❗ Redis 필요, 로직 복잡 ✅ 간단한 로직
실시간 만료 처리 가능 (Redis에서 jti 삭제) 불가능 (JWT 자체 내장 만료만 의존)

💡 참고: 너의 구조는 이런 상황에 적합해

  • 보안이 중요한 시스템 (예: 관리자 페이지, 민감한 사용자 정보)
  • 로그인 세션을 실시간으로 무효화할 필요가 있을 때
  • 토큰 유출을 방지하고자 사용자마다 다른 서명을 사용하고 싶을 때

궁금한 거 더 있으면 얼마든지 물어봐!
원한다면 이 구조를 그림이나 도식으로 그려줄 수도 있어! 🎯🛠️

 

 

 

 

======jwt 토큰 종류=====
✅ JWT 인증 흐름 (Access Token + Refresh Token)

1️⃣ 클라이언트 → 서버 : 로그인 요청

설명: 사용자가 아이디와 비밀번호 등으로 로그인 요청을 보냅니다.

2️⃣ 서버 → 클라이언트 : Access Token과 Refresh Token 발급

설명: 서버는 인증 정보를 확인한 뒤, Access Token과 Refresh Token을 생성하여 클라이언트에 전달합니다.

3️⃣ 클라이언트 → 서버 : API 요청 시 Access Token 포함

설명: 클라이언트는 이후 API 요청을 보낼 때 Access Token을 HTTP 헤더에 포함하여 보냅니다.

4️⃣ 서버 : Access Token의 유효성 검증

설명: 서버는 전달받은 Access Token을 검증하여 사용자의 권한을 확인합니다.

5️⃣ Access Token 만료 시 → 클라이언트 → 서버 : Refresh Token으로 재요청

설명: Access Token이 만료된 경우, 클라이언트는 보관 중인 Refresh Token을 이용하여 새 Access Token을 요청합니다.

6️⃣ 서버 : Refresh Token 검증 후 새로운 Access Token 발급

설명: 서버는 Refresh Token이 유효하다면, 새로운 Access Token을 생성하여 클라이언트에 전달합니다.

 

'프로그래밍 개념 정리' 카테고리의 다른 글

EDC 핵심 기능  (0) 2025.04.22
jwt, 엑세스 토큰, 리프레시 토큰  (0) 2025.04.13
상수와 리터럴 차이  (0) 2025.04.04
라이브러리와 패키지, 핸들러  (0) 2025.04.04
리터럴? Literal? literally?  (0) 2025.04.01