goodbye

JWT builder with Spring Security 본문

Spring/Spring Security

JWT builder with Spring Security

goodbye 2022. 8. 15. 15:05

 

클라이언트로부터 아이디와 패스워드를 입력받는 로그인 기능을 직접 구현하지 않고 

Spring Security를 이용해서 권한을 체크하고 암호화된 패스워드를 비교하여 로그인을 처리하는 기능을 구현해보면서 

JWT(Json Web Token)을 이용해보았습니다.

 

1.  build.gradle 의존성 추가

 

2. Spring Security 설정

기존에는 WebSecurityConfigurerAdapter를 상속받아 오버라이딩 하는 방법으로 구현하면 되었는데 

스프링 버전이 업데이트되면서 WebSecurityConfigurerAdapter 과 그 외 몇가지 기능들이 Deprecated 되었습니다.

일단 WebSecurityConfigurerAdapter 를 상속받아 구현하는 방법은 아래와 같습니다

 

  • WebSecurityConfigurerAdapter 을 상속받아 구현하는 방법 ( Deprecated )

 

  • SecurityFilterChain을 Bean으로 등록하는 방법 ( 변경된 방법) 

변경된 방법은 모든것들을 Bean 으로 등록해서 스프링 컨테이너가 관리할수 있도록 변경되었습니다.

 

 

3.  Authentication Filter 

권한 인증과 클라이언트의 패스워드 체크가 완료되면 로그인 성공 반환 값을 정의하여 리턴하게 되는데

이때 JWT 토큰을 생성하여 토큰 만료시간과 함께 리턴 할 수 있습니다

 

4. Jwt signWith deprecated 이슈

서명을 위한 signWith() 메서드를 사용할때 SignatureAlgorithm 를 사용하는것은 괜찮지만

다른 인자인 String secretKey 를 전달하는것은 삭제될 예정일 내용이라고 합니다.

 

5. JWT Create

따라서 String 이 아닌 Key 객체를 전달할 수 있도록 변경하고 Jwt 를 생성하여 response header 에 전달합니다.

 

6.  Postman & jwt.io 에서 확인

서버에서 리턴받은 token과 userId를 postman에서 확인할수 있고

jwt.io 웹페이지에서 해당 token을 복사하여 입력하면 decoded 된 데이터를 얻을수 있습니다

 

  • 서버에서 전달한 userId
  • 서버에서 전달한 인증 만료시간(현재시간 + 갱신시간(24시간)

 

 


# 참고

https://docs.spring.io/spring-security/reference/servlet/getting-started.html

https://github.com/jwtk/jjwt

https://github.com/jwtk/jjwt/issues/334

 

Comments