[12.26] 내일배움캠프[Spring] TIL-39

박상훈·2022년 12월 26일
0

내일배움캠프[TIL]

목록 보기
39/72

[12.26] 내일배움캠프[Spring] TIL-39

1.Spring Security

  • 저번시간 인증/인가를 제공하는 Spring Security에 대해 간단한 실습을 진행 중 이였다.

Password 암호화

  • 비밀번호는 저장 시 꼭 암호화를 해야한다.

양방향 <-> 단방향

양방향 알고리즘

  • 암호화 : 평문 -> ( 암호화 알고리즘 ) -> 암호문
  • 복호화 : 암호문 -> ( 암호화 알고리즘 ) -> 평문

단방향 알고리즘

  • 암호화 : 평문 -> ( 암호화 알고리즘 ) -> 암호문
  • 복호화 : 불가능!!!

-> 그렇다면 사용자가 암호호된 비밀번호를 알고 있어야하나?? -> 아닌데..?

Password 확인절차

  • 사용자가 아이디/패스워드 (평문) 입력 -> 서버에 로그인 요청 -> 서버에서 패스워드 암호화
  • 평문 - > ( 암호화 알고리즘 ) -> 암호문
  • DB에 저장 된 아이디/패스워드(암호문)과 일치하는지 확인!
  • PassWordMatching : 비밀번호 암호화 , 사용자 입력한 비밀번호 DB에 저장된 암호와 비밀번호랑 맞는지 확인

Spring Security 권한 설정

  • ( 다른 방법도 존재함 )
  • @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 )
profile
기록하는 습관

0개의 댓글