토큰 생성에 필요한 데이터
- Base64로 Encode된 Secret Key를 properties에 작성해두고 @Value를 통해 가져옵니다.
- JWT를 생성할 때 가져온 Secret Key로 암호화합니다.
- 이때 Encode된 Secret Key를 Decode 해서 사용합니다.
- Key는 Decode된 Secret Key를 담는 객체입니다.
- @PostConstruct는 딱 한 번만 받아오면 되는 값을 사용 할 때마다 요청을 새로 호출하는 실수를 방지하기 위해 사용됩니다.
- JwtUtil 클래스의 생성자 호출 이후에 실행되어 Key 필드에 값을 주입 해줍니다.
- 암호화 알고리즘은 HS256 알고리즘을 사용합니다.
- Bearer 란 JWT 혹은 OAuth에 대한 토큰을 사용한다는 표시입니다.
- 로깅이란 애플리케이션이 동작하는 동안 프로젝트의 상태나 동작 정보를 시간순으로 기록하는 것을 의미합니다.
- 우리는 Logback 로깅 프레임워크를 사용해서 로깅을 진행하도록 하겠습니다.
JWT 생성
- JWT의 subject에 사용자의 식별값 즉, ID를 넣습니다.
- JWT에 사용자의 권한 정보를 넣습니다. key-value 형식으로 key 값을 통해 확인할 수 있습니다.
- 토큰 만료시간을 넣습니다. ms 기준입니다.
- issuedAt에 발급일을 넣습니다.
- signWith에 secretKey 값을 담고있는 key와 암호화 알고리즘을 값을 넣어줍니다.
- ket와 암호화 알고리즘을 사용하여 JWT를 암호화합니다.
JWT Cookie에 저장
받아온 Cookie의 Value인 JWT 토큰 substring
- StringUtils.hasText를 사용하여 공백, null을 확인하고 startsWith을 사용하여 토큰의 시작값이 Bearer이 맞는지 확인합니다.
- 맞다면 순수 JWT를 반환하기 위해 substring을 사용하여 Bearer을 잘라냅니다.
JWT 검증
- Jwts.parserBuilder() 를 사용하여 JWT를 파싱할 수 있습니다.
- JWT가 위변조되지 않았는지 secretKey(key)값을 넣어 확인합니다.
JWT에서 사용자 정보 가져오기
- JWT의 구조 중 Payload 부분에는 토큰에 담긴 정보가 들어있습니다.
- 여기에 담긴 정보의 한 ‘조각’ 을 클레임(claim) 이라고 부르고, 이는 key-value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
- Jwts.parserBuilder() 와 secretKey를 사용하여 JWT의 Claims를 가져와 담겨 있는 사용자의 정보를 사용합니다.
JWT 테스트
'컴퓨터 프로그래밍 > Spring' 카테고리의 다른 글
[Spring] [Memo] 메서드, 변수 명 선택, 중복된 @Transactional 처리, Pagenation 시 추가 데이터 압축 등 추가 Tips (1) | 2024.08.30 |
---|---|
[Spring] 필터, 로깅 (0) | 2024.08.25 |
[Spring] JWT 란? (0) | 2024.08.24 |
[Spring] 인증과 인가, 쿠키와 세션 (0) | 2024.08.24 |
[Spring] Bean 수동 등록, 같은 타입의 Bean 이 2개일 때 해결 (0) | 2024.08.22 |