Spring Security, JWT 간단 정리
- 클라이언트가 특정 url, 리소스에 접근 할 때 적절한 권한이 있는지 확인하는 일련의 과정
- 스프링 시큐리티 아키텍쳐
- 클라이언트로부터 로그인 요청이 오면 AthenticationFilter에서 토큰을 생성.
- 토큰은 AthenticationProvider로 넘겨진다.
- AthenticationProvider는 UserDetailService에게 사용자 정보를 넘겨주어 데이터 베이스에서 사용자 인증정보를 가져온후 사용자 정보가 담긴 UserDetails 객체를 만든다.
- AthenticationProvider는 생성된 UserDetails객체와 토큰의 정보를 비교하여 완료되면 Athentication 객체가 반환되고 이 객체는 Session영역의 Security Context에 저장된다.
JWT(JSON Web Token)
- JSON형식의 문서를 안전하게 전송하기 위한 웹표준.
- JSON 객체를 암호화하여 만든 문자열 값으로 위,변조가 어렵다
- 토큰 자체에 데이터가 들어가 있는것이 특징. 토큰 만료 시간 이나 회원권한등을 저장할 수 있다.
- JWT는 .구분자로 세부분으로 나뉘어져 있다. 헤더.내용.서명
- 헤더에는 토큰정보와 해싱알고리즘, 내용은 실제저장되는 데이터, 서명에는 위변조를 방지하기위한 값이 들어다.
- 세션, 쿠키 기반의 로그인 방식이 아닌 토큰 기반의 로그인을 하게 되면 세션이 유지되는않는 다중서버에서 로그인 유지가 가능, 한 번의 로그인으로 유저정보를 공유하는 여러 도메인에서 사용할 수 있다.
- 과정
- 서버에서 로그인 처리가 완료되면 클라이언트에게 권한 정보가 들어있는 JWT토큰을 넘겨준다.
- request Header에 토큰값이 존재하면 토큰을 확인하고 Authentication 객체를 생성 후 Context에 저장.
- 토큰이 존재하지 않다면 회원 확인 후 토큰 설정 및 생성하여 클라이언트에게 반환
- 클라이언트는 서버에게 요청 시 마다 헤더에 이 토큰을 담아서 전송한다.
- 서버는 헤더에 담긴 토큰 값을 확인 하고 권한에 맞는 적절한 리소스를 제공.
- 적용
- 위의 시큐리티 과정에서 AthenticationProvider 역할을 JwtTokenProvider클래스(@Component)를 생성하여 토큰을 조회, 생성등 토큰 관련 메서드들을 정의해주어 대신한다.
- 이 컴포넌트는 인증 작업이 진행되는 filter에서 사용되어진다. JwtAuthenticationFilter라는 filter클래스를 만들어서 토큰을 확인하는 작업들을 수행.
댓글
댓글 쓰기