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 |