- 저번시간 인증/인가를 제공하는
Spring Security
에 대해 간단한 실습을 진행 중 이였다.
- 비밀번호는 저장 시 꼭 암호화를 해야한다.
- 암호화 : 평문 -> ( 암호화 알고리즘 ) -> 암호문
- 복호화 : 암호문 -> ( 암호화 알고리즘 ) -> 평문
- 암호화 : 평문 -> ( 암호화 알고리즘 ) -> 암호문
- 복호화 : 불가능!!!
-> 그렇다면 사용자가 암호호된 비밀번호를 알고 있어야하나?? -> 아닌데..?
- 사용자가 아이디/패스워드 (평문) 입력 -> 서버에 로그인 요청 -> 서버에서 패스워드 암호화
- 평문 - > ( 암호화 알고리즘 ) -> 암호문
- DB에 저장 된 아이디/패스워드(암호문)과 일치하는지 확인!
PassWordMatching
: 비밀번호 암호화 , 사용자 입력한 비밀번호 DB에 저장된 암호와 비밀번호랑 맞는지 확인
- ( 다른 방법도 존재함 )
@Secure("ROLE_ADMIIN")
-> 동작하고자 하는 컨트롤러 함수 부분에 추가EnalbeGlobalMethodSecurity( secured = true )
->WebSecurityConfig
부분에 추가
( 내 SpringBoot버전 차이로 나는@EaableMethodSecurity()사용했음
)
1) 사용자 회원가입 진행 -> 해당 URI요청은
PermitAll()
2) 사용자의 입력 값으로Service
에서 가입 실행
3) 비밀번호PasswordEncoding
으로 암호화 함
4) 사용자 로그인 진행 -> 해당 URI요청 PermitAll()처리 -> 사용자의 입력값으로Service
에서 회원 인증 실행
5) 인증 완료 ->JWT토큰 발행
->Header
에 응답 -> 쿠키에 저장 -> 게시글 작성 시JWT
토큰 같이 보내게 됨
6) 서버JWT
토큰 검증하고 토큰 정보 사용해서 사용자 인증 도와주는CustomSecurityFilter
를 사용하여 인증 인가를 진행하게 됨
7)SecurityContextHolder
에 인증을 완료한 사용자의 정보를 저장하는데 이를 통해Spring Security
인증이 되었다는 것을 알려준다.
- 요약 :
JWT
토큰과Spring Security Filter
를 사용해 사용자가 로그인 된 상태를 유지시켜준다.
Spring Security
를 사용하게 되면 로그인이나 회원가입 같이 특정 인증이 없어도 창의 변환이나 페이지를 띄울 수 있게 permitAll()를 통해 열어줘야 작업이 가능하다.- 보통은
Bean
으로 등록하는Config
클레스에http.authorizeRequests().antMatcher()
를 통해 특정 URI요청을 풀어주는데, 나는 Spring Boot 의 버전이 3.x.x이라Deprdcated
되었다고 떴고, 해당 메서드도 동작하지 않았다.
- 따라서 Example에 따른 코드로 수정하는게 생각보다 간단해보였지만 어려웠고, 아직도 동작은 하지만 잘 한건지 는 모르겠다.. 일단 돌아는 가니까아... 그 전에는 로그인 페이지만 열어줘서 회원가입 페이지가 뜨지 않았었다.
http.authorizeRequests().antMatcher()
->http.authorizeRequests().requestMatcher()
- 현재 내가 파악한 흐름은 특정
URI
즉 식별자를 통해( URL 보다 상위 개념 )Controller
에 들어가기 전, 해당 페이지의 작업에 대한 인증/인가를Spring Security
를 통해 하게 되는데, 그 때
Filter Chain
를 거치게 되고, 그 순간 인증/인가를 받지 않아도 되는 URI는PermitAll()
해줘야하며, 인증 객체는 UserDetails에 담긴다.
- 그리고 Spring Security는 기본적으로 세션 저장 방식을 사용하기 때문에 우리가 JWT를 사용하기 위해서는 커스텀해서 사용해야한다.(addFilterBefore())를 통해 Filter커치기 전에 수행하게..
- 따라서 앞으로의 큰 흐름을 그대로 이해하고 가져가되, 큰 개념들을 확실하게 잡아야할 필요가있다.
- 이해 안될 때 보는 그림 첨부
- 여기서 Principal(User) , Credentails(Password), Authorities( Role )