스테이츠 코드(백엔드)/개인 회고
[코드스테이츠] 기술 면접
개발하는 동그리
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 예외 발생
반응형