반응형
Spring에서 JWT는 JSON Web Token의 약자로, 인증 및 권한 부여를 위한 토큰 기반의 인증 방식 중 하나입니다.
JWT는 클레임(claim) 기반의 토큰으로, 정보를 안전하게 전달하기 위해 사용됩니다.
Spring 프레임워크에서 JWT를 사용하면 사용자 인증, 권한 부여 및 보안 관련 작업을 효율적으로 처리할 수 있습니다.
JWT는 세 부분으로 구성됩니다: Header, Payload, Signature.
- Header: 토큰의 타입과 해싱 알고리즘 정보를 포함합니다.
- Payload: 클레임(claim)이라고 불리는 정보를 포함합니다. 클레임은 사용자에 대한 정보 및 추가적인 메타데이터를 포함할 수 있습니다.
- Signature: 서명 부분은 헤더와 페이로드의 내용을 인코딩하고, 이를 시크릿 키(secret key)와 함께 서명하여 토큰이 변경되지 않았음을 보장합니다.
Spring 프레임워크에서 JWT를 사용하려면 다음과 같은 단계를 따를 수 있습니다:
- 의존성 추가: Spring Security와 JWT 라이브러리를 프로젝트에 추가합니다.
- 설정 구성: JWT의 인증 및 권한 부여를 위한 필터를 설정합니다.
- 토큰 생성: 사용자가 로그인하면 JWT를 생성하고 발급합니다.
- 요청 인증: 클라이언트가 보낸 요청에서 토큰을 추출하고, 이를 검증하여 인증 및 권한 부여를 처리합니다.
- 보안 설정: 보안을 강화하기 위해 토큰의 유효성 검사 및 만료 기간을 설정합니다.
Spring에서 JWT를 사용하는 방법에 대한 코드 예시는 다음과 같습니다:
// JWT 생성 및 검증을 위한 클래스 예시
public class JwtTokenProvider {
private final String secretKey = "yourSecretKey"; // 시크릿 키
public String generateToken(Authentication authentication) {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
Date now = new Date();
Date expiryDate = new Date(now.getTime() + 3600000); // 토큰 만료 시간 설정 (예: 1시간)
return Jwts.builder()
.setSubject(userDetails.getUsername())
.setIssuedAt(new Date())
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, secretKey)
.compact();
}
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
return true;
} catch (SignatureException | MalformedJwtException | ExpiredJwtException | UnsupportedJwtException | IllegalArgumentException e) {
return false;
}
}
public String getUsernameFromToken(String token) {
return Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
// 다른 유틸리티 메소드들...
}
Spring에서 JWT를 사용하여 보안을 강화하고 인증 및 권한 부여를 처리하는 방법에 대한 자세한 내용은 실제 프로젝트나 블로깅 예시를 통해 확인할 수 있습니다. 이를 통해 보다 안전하고 효율적인 사용자 인증 및 보안 기능을 구현할 수 있습니다.
반응형
'TIL(Today I Learned)' 카테고리의 다른 글
| [TIL] Java 문법 복습 - 변수, 연산자 (2) | 2023.11.30 |
|---|---|
| [TIL] 똥망... (0) | 2023.11.20 |
| [TIL]Query Methods (0) | 2023.11.16 |
| [TIL]SpringBoot의 JPA (0) | 2023.11.15 |
| [TIL ]Entity (1) | 2023.11.14 |