스테이츠 코드(백엔드)/개인 회고

[코드스테이츠] 기술 면접

개발하는 동그리 2022. 8. 18. 11:39
반응형
  • 인증 / 보안
    • 1번 - 인증과 인가의 차이에 대해 설명해 주세요.
    • 2번 - 세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.
    • 3번 - 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.
    • 4번 - 세션과 토큰 인증 방식 중 각각의 장단점을 말씀해 주세요.
    • 5번 - HTTP와 HTTPS 각각에 대해 설명하고 둘의 차이점을 말씀해 주세요.
    • 6번 - HTTPS의 동작 방식을 설명해 주세요.
    • 7번 - OAuth 2.0의 워크플로우에 대해서 설명해 주세요.
    • 8번 - Spring Security의 인증 처리 흐름에 대해 설명해 주세요.
    • 9번 - Spring Security의 인가 처리 흐름에 대해 설명해 주세요.
    • 10번 - Filter가 무엇인지 설명하고 Filter Chain의 동작에 대해 설명해 주세요.
  • ✔ Cloud
    • 11번 - 사용해 본 클라우드 인프라 서비스에 대해 소개해 주세요.
    • 12번 - vmware와 같은 가상 머신이랑 Docker가 무슨 차이가 있는지 설명해 주세요.
    • 13번 - CI/CD가 무엇이라고 생각하시나요? CI와 CD의 차이점이 무엇인지 설명해 주세요.
    • 14번 - 본인이 구현해 본 CI/CD 배포 자동화 과정을 설명해 주세요.

인증과 인가

Authentication

인증은 사용자의 신원을 검증하는 행위로서 보안 프로세서의 첫 단계이다. 사용자가 직접 아이디 또는 비밀번호를 관리할 수 있다. 

-> 선택한 인증 요건과 관련하여 적합한 자격 증명을 입력하는 직원에게 기업 시스템에 대한 액세스를 허용한다.

-> 사내 직원용 프로그램에 로그인할 수 있는 권한

Authorization

인가는 인증된 사용자에게 권한기능을 부여한다. 이 기능은 보안팀에서 관리하기 때문에 사용자가 접근할 수 없고, 인가를 통해 접근할 수 있는 여부가 결정된다. (액세스 제어 or 클라이언트 권한이라고 불리기도 한다.)

-> 부서별 파일에 액세스할 수 있는 권한을 부여하고, 필요할 경우 금융 정보 등의 기밀 데이터에 대한 액세스 권한을 가질 수 있다. 따라서 직원은 각자 업무 수행에 필요한 파일에 액세스가 되어야 한다.

 

 


Spring Security의 인증 처리 흐름

 

스프링 인증 처리 절차

  • 사용자가 http Request로 Username과 Password를 가진 상태로 접근하고 Request는 관련된 SecurityFilter Chain을 통과한다. 

  • 로그인 정보는 AuthenticationFilter의 구현체인 UsernamePasswordAuthenticationFilter로 전달되고 username과 password로 UsernamePasswordAuthenticationToken을 생성한다. 

  • 생성된 Authentication(Token)을 AuthenticationManager에게 전달한다. 

  • AuthenticationManger는 전달받은 Authentication을 다수의 AuthenticationProvider에 전달하여 유효성 검증 및 처리를 위임한다.
  • 입력받은 사용자의 인증 정보의 유효성 검증을 위해 UserDetailsService로 전달한다. 
  • UserDetailService는 loadUserByUserName() 메서드를 통해 사용자 정보를 조회하고 실제 존재하는 사용자 유무와, Username과 password가 유효한지 검증한다.
  • UserDetailService에서 사용자 인증이 성공하면, 해당 사용자 정보를 활용해서 UserDetails를 생성한다.
  • 생성된 UserDetails를 AuthenticationProvider에 전달한다. 
  • Authentication Provider에서 authenticate() 메서드가 호출되며, UserDetails, Authorities로 생성한 Authentication을 전달한다.

  • Authentication(userDetail + Authorities)을 AuthenticationFilter에 전달한다. 

  • AuthenticationFilter는 인증 처리가 모두 완료되어 해당 사용자의 인증 정보를 담고 있는 Authentication을 SecuritiContext에 저장한다.
principal - 사용자를 식별하고 고유 식별자와 암호로 인증이 이루어진다.  UserDetails 인터페이스의 구현체이다. 

 

Summary

사용자가 인증 요청시 Authentication(토큰)을 생성하고 이 토큰을 전달해서 실제 사용자 정보 저장소에 있는지 확인 후 저장하는 데 사용될 저장될 개인정보를(UserDetails) 함께 Authentication에 담아 Security Context에 저장한다. Security Context안에 Authentication객체가 존재하면 인증이 계속 유지된다. 


 

Spring Security의 인가 처리 흐름

스프링 인가 처리 절차

  • 사용자가 HTTP를 요청한다.

  • FiterSecurityInterceptor는 SecuritiContextHolder로 부터 Authentication을 얻는다.

  • FiterSecurityInterceptor는 FilterInvoation을 생성한다. 

  • FilterInvocation을 SecurityMetadataSource에 전달하고 ConfigAttribute(다수 존재가능)를 생성합니다. 

  • Authentication, ConfigAttribute를 AccessDecisionManager로 전달한다.

  • AccessDecisionManager는 decide(Authentication, Collection) 메소드를 호출하여 AccessDecisionVoter에 처리를 위임합니다. AccessDecisionVoter 또한 여러 개일 수 있다.

  • 각 AccessDecisionVoter는 vote() 메소드를 호출하여 해당 Authentication의 Authorities, ConfigAttribute 목록들을 비교하여 접근 권한을 부여하거나 제한한다. 
    • 권한(ㅇ) -> AccessDecisionManager에 ACCESS_GRANTED를 전달
    • 권한( x ) -> AccessDeniedException 예외 발생

 

 

반응형