본문 바로가기
Spring/Spring-Security

SpringSecurity 와 JWT 의 구조, 동작 과정

by YoonJong 2022. 10. 23.
728x90

인증 : 해당 사용자가 본인이 맞는지 확인

인가 : 인증된 사용자가 요청한 자원에 접근 가능한지 권한 확인

Principal (접근주체) : 보호받는 Resource 에 접근하는 대상

Credential (비밀번호) :Resource 에 접근하는 대상의 비밀번호

 

인증 -> 인증 성공 후 -> 인가

 

인증과 인가를 위해 principal 을 아이디로, Credential 을 비밀번호로 사용한다.


스프링 시큐리티의 구조

1. AuthenticationFilter 에서 Http 요청을 받는다.

 

2. 해당 부분에서는 request 로 부터 username, password 를 가지고 와서 UsernamePasswordAuthenticationToken을 생성한다.

 

3. 생성된 UsernamePasswordAuthenticationToken 을 가지고 AuthenticationManager(인터페이스, 구현체인 providerManager) 에게 인증을 진행하도록 위임한다.

 * UsernamePasswordAuthenticationToken 은 Authentiocation의 인터페이스의 구현체이다.

 

 4. AuthenticationProvider 가 실질적인 인증과정을 거쳐서 인증에 성공하면 요청에 대해 ProviderManager 가 인증이 되었다고 알려준다.

 * ProviderManger 의 역할은 과정을 처리해줄 AuthenticationProvider 을 찾고, 응답을 받는 역할을 한다.

 

5. AuthenticationProvider 에서는 받은 UsernamePasswordAuthenticationTokenUserDetailsService 에 사용자 정보를 넘겨준다.

* UserDetailsService 은 실제 데이터베이스에서 사용자 인증정보를 가져온다.

 

6. 넘겨받은 사용자 정보를 통해 UserDetails 객체를 만든다.

 

7. AuthenticationProvider 는 Userdetails 를 넘겨받고 사용자 정보를 비교한다.

 

8. 인증이 완료되면 사용자 정보를 담은 Authentication 객체를 반환한다.

 

9. 처음 요청받은 AuthenticationFilterAuthentication 객체가 반환된다.

 

10. Authentication 객체를 SecurityContext 에 저장한다.


스프링시큐리티 + JWT 동작과정

https://gksdudrb922.tistory.com/217

1. 클라이언트에서 ID / PW 로그인 요청을 한다.

2. 서버 DB 에 요청받은 ID / PW 가 있다면, Access Token 과 Refresh Token을 발급해준다.

3. 이후 클라이언트에서는 요청을 할 때 Access Token을 헤더에 담아 서버가 허용한 API 를 사용할 수 있다.

 

보통 Access Token 은 짧게 설정(보안문제) 하고 Refresh Token 은 길게 설정을 한다.

Refresh Token 을 이용해 만료된 Access Token을 재발급 받을 수 있다.

만약 Refresh Token 이 유출이 된다면, 서버에서는 두 토큰을 모두 폐기시켜야 한다.

 

국제 인터넷 표준화 기구에서는 Refresh Token 과  Access Token 을 같은 유효시간을 갖게해서 사용자가 

Refresh Token 을 사용해 Access Token을 재발급 받았다면 Refresh Token 과 Access Token 를 다시 재발급 받는 것을 권장하고 있다고 한다.

 

 

728x90

댓글