왕초보일지

240116 TIL |

다시은 2024. 1. 16. 20:31

스프링 심화 주차

 

Spring Security 

filter 들이 정말 많고 이름이 헷갈린다

책이나 블로그에 UserDetails 같은 인터페이스들이 많았지만 다 비슷비슷하게 생겨서 정신이 없었다.

 

SecurityContextHolderFilter

: SecurityContext 객체를 생성, 저장, 조회

 

 SecurityContextHolder.get ~~ 으로 저장된 유저 정보를 바로 꺼내왔었다.

 

CSRF

: 유저가 특정 이미지 등을 클릭할 때 서버측으로 의도치 않은 http 요청을 전송하게 하여 공격하는 걸 막는 필터

 

LogoutFilter

: 설정된 로그아웃 URL 로 요청이오면 세션 무효화, 쿠키 삭제, Context 비움

swagger 상에서 authorization 로그아웃 해준거랑 같은건가?

 

UsernamePasswordAuthenticationFilter

: 설정된 로그인 URL 로 요청이 왔을 때 각각을 비교하여 실제 인증 수행, 인증에 성공한 Authentiatication 저장

    // 인증 정보 설정
    override fun doFilterInternal(
        request: HttpServletRequest,
        response: HttpServletResponse,
        filterChain: FilterChain
    ) {
        val token = parseBearerToken(request) // 토큰 추출
        val user = parseUserSpecification(token) // 사용자 정보 추출
        UsernamePasswordAuthenticationToken.authenticated(user, token, user.authorities) // 인증된 사용자를 나타내는 토큰 생성
            .apply { details = WebAuthenticationDetails(request) } // 요청날린 client 또는 프록시의 ip 주소와 세션 id 저장
            .also { SecurityContextHolder.getContext().authentication = it } // sercurityContextHolder 에 인증 정보 저장
        filterChain.doFilter(request, response) // 다음 필터
    }

 

 

 

DefaultLoginPageGeneratingFilter / Logout

: 로그인 로그아웃 페이지 띄우는 필터

 

SecurityContextHolderAwareRequestFilter

: Context 에 저장된 정보로부터 Request 를 구성

Request 를 구성?? 잘 모르겠다.

 

AnonymousAuthenticationFilter

: 익명사용자에 대한 인증 처리

토큰 유효하지 않을 때 왜 굳이 설정하나 했었는데 익명처리함으로써 다른 로직을 만들어줄 수도 있어서 그런건가?

 

ExceptionTranslationFilter

: 인가예외와 인증예외 처리

인증인가예외처리 어떻게 하나 싶었는데 이런 필터도 있었다.

 

AuthorizationFilter

: 권한을 확인

 

 

사용안하는 필터들은 FilterChain 으로 꺼놓을 수 있다.!

 

 

JWT 

 

Jwt 검증 / 생성

검증은 생성한 jwt 가 맞는지, 만료기간이 지나지 않았는지 확인

생성할 때는 알고리즘을 설정하고 Claim 을 지정! 

custom claim 으로 role 을 설정할 수 있다. => 권한 부여 가능

 

@Value 

: yml 파일 속 작성한 값 주입 가능

 

@ConfigurationProperties

: 한 번에 data 클래스로 값들을 받아올 수 있음 (참조)

 

 

로그인을 구현할 때 

Spring Security의 filter 를 사용하여 구현할 수 있다고 한다.

=> 모든 인증을 filter 를 사용하여 구현

 

 

PasswordEncoder() 를 통해 암호화

 

헤더속 JWT

{ "Authorization": Bearer {JWT} }

그래서 파싱할 때 헤더의 authorization 을 받아와서 앞에 Bearer 을 제거해줬었다.

 

인증하는 필터의 핵심은 doFilter 를 구현하는 것

Spring Web

Spring Security Authentication

 

 

인증 실패 시

=> 401이 나와야 한다!!!!

403은 인증은 되었지만 권한이 없을 때 ( 인가에 실패할 때) 쓴다.

 

❓403이 나오는 이유

스프링 시큐리티 에서는 최종적으로 ExceptionTranslationFilter 를 거치는데

여기서 인증이 되지 않았거나, AuthenticationException 이 발생하면

AuthenticationEntryPoint 에 처리 역할을 위임하게 된다.

이 때 시큐리티에서는 기본적으로 Http403ForbiddenEntryPoint 가 이 역할을 하기 때문

 

 

인증 예외처리

AuthenticationEntryPoint 을 등록, SecurityConfig 로 설정

 

 


AWS Amazon Web Services

클라우드 컴퓨팅 서비스

 

일래스틱 빈스토크

: EC2, 오토 스케일링 그룹, 로드 밸런서, RDS 를 한 번에 설정하는 서비스

 

❓애플리케이션 소스의 번들 형태

번들 형태 : 주로 SW 애플리케이션을 패키징하고 배포하기 위한 구조!

애플리케이션 번들은 실행 가능한 코드, 리소스, 설정 파일 등을 포함하는 디렉토리 또는 아카이브.

안드로이드 폰 사용할 때 자주 보던 APK 같은거!

 

 

 

 

 

 


와 왜이렇게 피곤하지 ??

교안을 프린트해서 보고싶은데 라이트모드로 전환이 안되길래 그냥 노트북 화면으로 봤더니 눈알 빠질 것 같다😰😰