반응형
JWT(Json Web Token)
- 서버와 클라이언트 간 인증 및 정보 교환을 위해 널리 사용되는 토큰 기반 인증 방식
1. 프로젝트 환경 설정
JWT를 구현하려면 필요한 라이브러리를 추가해야 합니다.
Maven 의존성 추가
pom.xml에 아래와 같은 의존성을 추가합니다.
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JWT 라이브러리 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
</dependency>
</dependencies>
2. JWT 생성 및 검증
JWT는 크게 3부분으로 구성됩니다.
- Header: 토큰의 타입과 서명 알고리즘 정보
- Payload: 토큰에 담을 데이터
- Signature: Header와 Payload를 암호화한 값
이제 JWT를 생성하고 검증하는 유틸리티 클래스를 만들어 보겠습니다.
JWT Utility Class
아래는 JWT를 생성하고 검증하는 JwtUtil 클래스입니다.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "my-secret-key"; // 비밀 키
private static final long EXPIRATION_TIME = 1000 * 60 * 60; // 1시간
// JWT 생성 메서드
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
// JWT 검증 메서드
public static Claims validateToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
}
}
3. JWT를 활용한 API 구현
JWT 생성 및 검증 로직을 사용해 간단한 API를 구현합니다.
컨트롤러 구현
AuthController를 생성해 로그인과 사용자 정보를 반환하는 API를 만듭니다.
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/auth")
public class AuthController {
// 로그인 시 JWT 발급
@PostMapping("/login")
public String login(@RequestParam String username) {
// 실제로는 username과 password를 확인해야 함.
// 여기서는 단순히 username으로 토큰 발급
return JwtUtil.generateToken(username);
}
// JWT를 이용한 사용자 정보 확인
@GetMapping("/user")
public String getUserInfo(@RequestHeader("Authorization") String token) {
// Bearer 토큰 형식에서 실제 토큰 부분만 추출
token = token.replace("Bearer ", "");
return JwtUtil.validateToken(token).getSubject();
}
}
4. 실행 및 테스트
애플리케이션 실행
Spring Boot 애플리케이션을 실행합니다.
Postman으로 테스트
- JWT 발급 테스트
- URL: POST http://localhost:8080/auth/login
- Body: username 파라미터에 값을 입력.
- 응답: JWT 토큰이 반환됩니다.
- JWT 검증 테스트
- URL: GET http://localhost:8080/auth/user
- Headers: Authorization에 Bearer {발급받은 토큰}을 추가.
- 응답: 토큰에 포함된 사용자 이름(username)이 반환됩니다.
5. 이후
다음 포스팅으로는 아래 순서대로 작성하겠습니다 :)
- 비밀번호 암호화 및 사용자 인증
- JWT 필터를 활용한 전역 인증
- 리프레시 토큰 구현
'SpringBoot' 카테고리의 다른 글
SpringBoot - JWT 필터를 활용한 전역 인증 구현 (0) | 2024.11.26 |
---|---|
SpringBoot -비밀번호 암호화 및 사용자 인증하기 (0) | 2024.11.24 |
SpringBoot - SLF4J (0) | 2024.11.17 |
SpringBoot - 백엔드 개발할 때 알아두면 좋은 기술 스택 (1) | 2024.11.16 |
SpringBoot - Could not find artifact mysql:mysql-connector-java:pom:unknown in mvn2s [에러] (0) | 2024.09.24 |