![[Spring Security] 3. RestAPI 전환 (jwt)](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255BSpring%2520Security%255D%25203.%2520RestAPI%2520%25EC%25A0%2584%25ED%2599%2598%2520%28jwt%29%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3Djay0628&w=2048&q=75)
세션 = 사물함 안의 정보 신뢰할 수 있는거
토큰 =
1-4번 설명할 수 있어야 됨
UsernamePasswordAuthenticationFilter
/login post , xwww~ 불가능
BasicAuthenticationFilter
동작basic 인증은 기본이 되는 인증인데 단점이 있음
자원을 줄 때 id와 pw를 들고 감 = 가장 안전한 인증 = 인증과 인가 한번에
basic인증 = 들어갈때 로그인해야하니까 id,pw 들고감 집에갈때 아무것도 안들고 감 내일 다시 가면 id,pw 다시 들고감 → 가장 안전하지만 고객이 힘듦 ux가 별로이니까
특징 id,pw를 base64로 인코딩해서 암호화해서 https에 집어넣는다.
rsa로 인증된걸 public이나 private key로 풀어서 확인
upaf 발동하면 baf 죽고 upaf 죽으면 baf 가 발동하는데
둘다 죽도록 설정해둔 상태임
인증은 내가 컨트롤러에서 직접
- 기존 필터 UPAF 상속→ IoC 등록 → 덮어씌워짐 → 전부 재정의해서 커스텀 가능
- 모든 필터가 상속하는 a를 hello가 상속받아서 hello를 필터체인에 끼워넣기
- 필터 다 통과시킨 뒤 /login controller에 만들어서 직접 처리 → 그러면 loadUserByUsername 못하니까 Security Context Holder에 UserDetails를 내가 직접 끼워넣는 방법 알아야됨
- 등 여러가지 방법이 있음
AuthenticationManager가 가진 Authenticate라는 함수만 IoC에서 땡겨서 써도 되고 내가 강제로 넣어도 되고
가장 쉬운건 필터로 구현해서 loadUserByUsername 호출 /두번째는 AM을 bean으로 등록해서 땡겨쓰기 / 세번째가 SCH.으로 접근해서 강제로 넣기
<우리가 할 일>
로그인은 controller에서 직접 하고 AuthenticationManager 가져다 쓰기
인가만 필터 만들기 → aware 필터 앞에 필터 두고 토큰이 정상/비정상에 따라서 통과시켜주도록
모든 SFC에 들어갈 수 있는 공통적으로 상속하는 타입의 클래스를 상속받아서 UPAF 빼고 내가 커스텀한 필터 넣기 OR 자리는 없지만 새 자리 만들어서 끼워넣기 가능
AuthenticationManager가 UserDetails를 가지고 Authenticate라는 함수를 UserDetails를 끼워서 호출 → UserDetails를 가지고 Authentication이라는 객체를 만듦
security는 SCH를 보고 해줌
로그인 하면 토큰 돌려줄거임
~~
토큰 검증 성공하면 내가 강제로 세션에 넣어줘야 됨 아니면 security가 사용 불가
아래 방식으로는 새 필터 만들어서 추가하기 불가능 갈아끼우기만 가능
http.addFilter()
final 키워드가 붙으면 new 될때 반드시 초기화 필요하다. → @RequiredArgsConstructor
인가
db 계속 조회하면 세션 쓸 이유 없으니까 credential에는 null
Share article