Spring Security / JWT
2021. 8. 14. 23:29ㆍSpring
Spring Security
스프링 기반의 애플리케이션 보안을 담당하는 프레임워크로 Filter 기반으로 동작하기 때문에 Spring MVC와 분리되어 동작한다.
- 접근 주체(Principal) : 보호된 대상에 접근하는 유저
- 인증(Authenticate) : 요청을 보낸 유저가 누구인지 확인
- 인가(Authorization) : 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한을 부여
Spring Security 동작
- AuthenticationFilter(UsernamePasswordAuthenticationFilter)는 사용자의 요청을 가로챈다. 그리고 인증이 필요한 요청이라면 사용자의 JSESSIONID(쿠키로 발급하여 값을 통해 세션을 유지할 수 있도록 한다./이전에 접근 여부를 확인할 수 있다.)가 Security Context에 있는지 판단한다. 없으면 로그인 페이지로 이동시킨다.
로그인 페이지에서 요청이 온 경우라면 로그인 페이지에서 입력받은 username와 password를 이용해 UsernamePasswordAuthenticationToken을 만든다. 그리고 UsernamePasswordAuthentication Token정보가 유효한 계정인지 판단하기 위해 AuthenticationManager로 전달한다. - AuthenticationManager 인터페이스의 구현체는 ProviderManager이고 AuthencationProvider에게 비밀번호 인증 로직 책임을 넘긴다.(AuthencationProvider는 개발자가 직접 커스텀해서 비밀번호 인증 로직을 직접 구현할 수 있다.)
- AuthenticationProvider는 UserDetailsService를 실행해 비밀번호 인증 로직을 처리한다.
UserDetailsService는 DB에 저장된 회원의 비밀번호와 비교해 일치하면 UserDetails인터페이스를 구현한 객체를 반환하는데, UserDetailsService는 인터페이스이며 UserDetailsService를 구현한 서비스를 직접 개발해야 한다. - 인증 로직이 완료되면 AuthenticationManager는 Authentication를 반환하며, 결과적으로 SecurityContext에 사용자 인증 정보가 저장된다.
- 인증 과정이 끝났으면 AuthenticationFilter에게 인증에 대한 성공 유무를 전달한다.
참조 : https://bamdule.tistory.com/52
JWT(JSON Web Token)
JSON객체로 서버-클라이언트 간에 정보를 전송하기 위한 방법
Header
토큰의 타입 + 암호화 알고리즘 방식
Payload
Claims(요구사항이나 정보)
- Registered Claims
- Claims
- iss : jwt발행자
- sub : jwt사용자
- and : jwt 수신자
- exp : 만료시간
- nbf : jwt가 처리를 위해 승인되지 않아야 하는 시간
- iat : jwt가 발행 된 시간
- jti : 고유식별자(토큰을 한 번만 사용할 수 있음)
- Claims
- Public Claims : 사용자 마음대로 정의 가능, 충돌을 방지하기 위해 정해진 규칙 내에서 정의해야 한다.
- Private Claims : 사용자 정의이지만 서버-클라이언트가 공유하기 위한 정보
Signature
토큰이 유효한지, 위변조 여부를 판단하기 위한 것
인코딩 된 Header과 Payload, secret, algorithm이 필요
Access Token + Refresh Token 인증 과정
반응형
'Spring' 카테고리의 다른 글
spring cloud config client설정(parameter store) (0) | 2021.08.23 |
---|---|
spring cloud config server설정(AWS parameter store) (0) | 2021.08.20 |
spring cloud config server설정(git) (0) | 2021.08.15 |
SpringBoot와 Slack webhook을 사용하여 메세지 보내기 (3) | 2021.08.10 |