JWT Token JAVA 구현 방법

2023. 6. 16. 10:17· IT 지식
목차
  1. JWT Token에 대해 알아보자
  2. JWT Token이란?
  3. JWT Token 구성
  4. JWT Token 과정
  5. JWT Token JAVA CODE 구현
반응형

JWT Token에 대해 알아보자

  1. JWT Token이란?
  2. JWT Token 구성
  3. JWT Token 인증 과정
  4. JWT Token JAVA CODE 구현

JWT Token이란?

  • `JWT`(JavaScript Web Token)는 웹 애플리케이션에서 사용자 인증 및 정보 교환을 위한 토큰 기반 인증 방식입니다. `JWT`는 토큰 자체에 사용자의 클레임(claim) 정보를 포함하고 있으며, 이를 통해 서버 간의 신뢰성 있는 정보 교환을 가능하게 합니다.
  • 서버의 상태를 유지하지 않고도 토큰을 사용하여 인증을 처리할 수 있습니다.
  • 토큰을 사용하여 클라이언트와 서버간 인증을 할 수 있습니다.

JWT Token 구성

  • Header(헤더): `JWT `토큰의 유형 및 해싱 알고리즘 정보를 담고 있습니다. 일반적으로 "alg"라는 키와 해싱 알고리즘 이름(ex: HMAC SHA256, RSA)을 포함합니다. 또한 "typ" 키를 사용하여 토큰의 타입을 명시할 수 있습니다.
  • Payload(페이로드): 토큰에 담길 클레임 정보를 포함하고 있습니다. 클레임은 토큰에 대한 속성 및 값의 조합으로 구성됩니다. 예를 들어, 사용자 ID, 권한, 만료 일자 등을 포함할 수 있습니다. 페이로드는 토큰의 실제 데이터 부분이며, 인코딩된 형태로 전달됩니다.
  • Signature(서명): 헤더와 페이로드를 기반으로 생성되는 서명입니다. 서버는 비밀 키를 사용하여 서명을 생성하고, 토큰을 검증할 때에도 이 비밀 키를 사용하여 서명의 유효성을 검증합니다. 서명은 헤더와 페이로드를 변조하지 않았음을 보장하고, 토큰이 송신자(서버)에서 생성된 것임을 확인할 수 있게 합니다.

JWT Token 과정

  1. 클라이언트가 인증을 위해 로그인 요청을 서버에 보냅니다.
  2. 서버는 로그인 정보를 검증하고, 유효한 경우 토큰을 생성합니다.
  3. 서버는 생성된 토큰을 클라이언트에게 반환합니다.
  4. 클라이언트는 서버로 요청을 보낼 때마다 JWT 토큰을 헤더에 포함하여 전송합니다.
  5. 서버는 받은 토큰을 검증하고, 페이로드에 포함된 클레임을 확인하여 인증과 권한 부여를처리 합니다.

JWT Token JAVA CODE 구현

Maven 라이브러리 추가

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

JWT 생성

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;

public class JwtExample {
    // JWT 비밀 키
    private static final String SECRET_KEY = "keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykey";

    public static void main(String[] args) {
        // JWT 토큰 생성
        String token = createJwtToken("user@example.com");
        System.out.println("JWT Token: " + token);

        // 생성된 JWT 토큰 검증
        boolean isValid = validateJwtToken(token);
        System.out.println("JWT Token Validation: " + isValid);
    }

    // JWT 토큰 생성
    public static String createJwtToken(String subject) {
        SecretKey secretKey = Keys.hmacShaKeyFor(SECRET_KEY.getBytes(StandardCharsets.UTF_8));

        String token = Jwts.builder()
                .setSubject(subject)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hour
                .signWith(secretKey, SignatureAlgorithm.HS256)
                .compact();

        return token;
    }

    // JWT 토큰 검증
    public static boolean validateJwtToken(String token) {
        SecretKey secretKey = Keys.hmacShaKeyFor(SECRET_KEY.getBytes(StandardCharsets.UTF_8));

        try {
            Jwts.parserBuilder()
                    .setSigningKey(secretKey)
                    .build()
                    .parseClaimsJws(token);
            return true; // 서명이 유효한 경우 true 반환
        } catch (Exception e) {
            return false; // 서명이 유효하지 않은 경우 false 반환
        }
    }
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'IT 지식' 카테고리의 다른 글

웹 접근성(Web Accessibility)이란  (9) 2024.11.07
WSL(Windows Subsystem for Linux) 설치 및 설정  (0) 2024.10.29
[MATOMO] 마토모 HTTP -> HTTPS #SSL #matomo ssl  (0) 2022.12.22
[티스토리 구글 애드센스 정산하기] 지급계좌 등록  (6) 2022.09.20
도커(Docker) VS 가상머신(Virtual Machine)  (0) 2022.08.16
  1. JWT Token에 대해 알아보자
  2. JWT Token이란?
  3. JWT Token 구성
  4. JWT Token 과정
  5. JWT Token JAVA CODE 구현
'IT 지식' 카테고리의 다른 글
  • 웹 접근성(Web Accessibility)이란
  • WSL(Windows Subsystem for Linux) 설치 및 설정
  • [MATOMO] 마토모 HTTP -> HTTPS #SSL #matomo ssl
  • [티스토리 구글 애드센스 정산하기] 지급계좌 등록
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • WSL
  • python
  • 수원 맛집
  • spring boot
  • GIT
  • axios
  • 자바
  • Java
  • 관상 어플
  • Spring
  • 파이썬
  • ubuntu
  • Queue
  • docker
  • github
  • Nuxt
  • 선택정렬
  • javascript
  • 티스토리챌린지
  • 어플
  • 알고리즘
  • VUE
  • DB
  • 강릉 맛집
  • 정렬
  • 오블완
  • mariadb
  • 수원역 맛집
  • 서울 맛집
  • 도커

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
JWT Token JAVA 구현 방법
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.