본문 바로가기
개발/Spring

Security + JWT를 사용해보자

by 설이주인 2023. 1. 10.

JWTGenerator, JWTValidator, SecurityConfig

 

 

 

JWT생성

 

JWT 검증

검증 단계에서 주의할 부분은

Claims claims = Jwts.parser()
    .setSigningKey(key)
    .parseClaimsJws(jwt.replace("Bearer ", "").trim())//pass the jwt that we received
  	.getBody(); // want to read body part of jwt token
 

parseClaimsJws 자동완성으로 작성하면서 Jwt가 작성 되는 경우가 있는데 에러가 발생하기에 주의해주자.

또한 위의 jwt.replace("Bearer " , "").trim()을 작성했다.

 

JWT 생성하면서 우리는 분명 생성한 JWT를 'Authorization' 명칭으로 넘겼는데? 의문이 생길 수 있다.

response.setHeader(SecurityConstants.JWT_HEADER, jwt);

 

웹에서 옮겨지는 JWT를 확인해보면 아래와 같은 형식으로 진행된다.

Authorization: <type> <credentials>

 

즉 Authorization의 명칭으로 Bearer 타입의 credentals 생성한 jwt 정보를 넘겨준다.

Bearer말고도 다양한 타입이 존재한다.

 

Basic : 사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용한다. (RFC 7617)

Bearer :JWT 혹은 OAuth에 대한 토큰을 사용한다. (RFC 6750)

Digest :서버에서 난수 데이터 문자열을 클라이언트에 보낸다. 클라이언트는 사용자 정보와 nonce를 포함하는 해시값을 사용하여 응답한다 (RFC 7616)

HOBA :전자 서명 기반 인증 (RFC 7486)

Mutual :암호를 이용한 클라이언트-서버 상호 인증 (draft-ietf-httpauth-mutual)

AWS4-HMAC-SHA256 : AWS 전자 서명 기반 인증.

 

'개발 > Spring' 카테고리의 다른 글

@Transactional에 대한 정리 [1]  (0) 2023.09.11
[Spring Security] @Secured(ROLE_?)  (0) 2023.01.13
[Security] JWT와 JWS는 뭘까...?  (0) 2023.01.06
[Security] 시큐리티 세션정책  (0) 2023.01.05
SecurityFilterChain을 작성해보자  (0) 2023.01.02