본문 바로가기
728x90

Spring Security12

[SpringSecurity] 주요 개념 정리 초기 계정 id : user pw : application실행 시 Run화면에 나타남 Using generated security password: fc491640-b71a-4c55-9f6a-acd67f919627 Dependency에 security를 등록하면 모든 요청을 막고 Security가 관리하게 된다. implementation 'org.springframework.boot:spring-boot-starter-security' 접근 주체 ( Principal ) 보호중인 대상에 접근하려는 유저 인증 ( Authenticate ) 해당 유저가 누구인지 검증하는 절차ID, PW 등을 이용한 로그인을 통하여 검증 해당 Application을 이용가능한 유저인가? 에 중점 인가 ( Authorize .. 2023. 9. 10.
[SpringSecurity] Annotation 정리 @EnableWebSecurity(debug = true) 디버깅 로그를 출력하는 옵션으로 debug = true를 하면 요청 URL, 세션 ID, 요청 브라우저 등의 정보가 나오고 또 적용된 FilterChain들을 볼 수 있다. @Secured 사용자의 권한정보에 따라 자동으로 해당 메서드의 접근을 제한할 수 있게 된다. @PostAuthorize 함수를 실행하고 클라이언트한테 응답을 하기 직전에 권한을 검사한다. @PreAuthorize 요청이 들어와 함수를 실행하기 전에 권한을 검사한다. ⭐ option ⭐ hasRole([role]) : 현재 사용자의 권한이 파라미터의 권한과 동일한 경우 true hasAnyRole([role1,role2]) : 현재 사용자의 권한디 파라미터의 권한 중 일치하는.. 2023. 9. 10.
[SpringSecurity] SNS 인증 💡 SNS 로그인 인증 순서 사용자가 서버에게 로그인을 요청 서버는 사용자에게 특정 쿼리들을 붙인 페이스북 로그인 URL을 사용자에게 보냄 사용자는 해당 URL로 접근하여 로그인을 진행한 후 권한 증서를 담아 서버에게 보냄 서버는 해당 권한 증서를 Facebook의 Authorization Server로 요청 서버는 권한 증서를 확인 후, Access Token, Refresh Token, 유저의 정보를 돌려줌 받은 고유 ID를 Key값으로 해서 DB에 유저가 있다면 로그인, 없다면 회원가입 진행 로그인이 완료되었다면 세션과 쿠키 , 토큰 기반 인증 방식을 통해 사용자의 인증을 처리 참고사항 개발자 사이트에서 웹 어플리케이션을 등록 후 APP_ID와 CLIENT_ID 등을 보내야 OAuth 에서는 어느 .. 2023. 9. 10.
[SpringSecurity] AccessToken 인증 💡 Access Token을 이용한 인증 JWT JSON Web Token의 약자 인증에 필요한 정보들을 암호화시킨 토큰을 말하며 Access Token으로 사용됨 JWT를 생성하기 위해선 Header, Payload, Verify Signature 객체를 필요로 함 Header 토큰의 타입을 나타내는 typ와 암호화할 방식을 정하는 alg로 구성됨 { 'alg': 'HS256', 'typ': 'JWT' } Paylod 토큰에 담을 정보를 포함 하나의 정보 조각을 클레임이라 부름 클레임의 종류 → Registered, Public, Private 3가지 존재 보통 만료 일시, 발급 일시, 발급자, 권한 정보 등을 포함 { 'sub': '1234567890', 'name': 'John Doe', 'admi.. 2023. 9. 10.
[SpringSecurity] Session 인증 💡 세션과 쿠키를 이용한 인증 인증 순서 사용자가 로그인을 함 서버에서 계정 정보를 읽어 사용자 확인 사용자에게 고유한 ID 값 부여하여 세션 저장소에 저장 이와 연결되는 Session ID를 발급 서버에는 HTTP 응답 헤더에 발급된 Session ID를 같이 보냄 이후 매 요청마다 HTTP 요청 헤더에 Session ID가 담긴 쿠키를 같이 보냄 서버에서는 쿠키를 받아 세션 저장소에서 대조를 한 후 대응되는 정보를 가져옴 인증이 완료되고 서버는 사용자에 맞는 데이터를 보내줌 장점 사용자의 정보는 세션 저장소에 저장되고, 쿠키는 그 저장소를 통과할 수 있는 출입증 역할을 함 → 쿠키가 담긴 HTTP 요청이 도중에 노출되더라도 쿠키 자체에는 유의미한 값을 갖고 잇지 않아서 쿠키에 사용자 정보를 담아 인증.. 2023. 9. 10.
[SpringSecurity] Authorization. 권한 SecurityFilerChain 당 한개의 FilterSecurityInterceptor를 둘 수 있고, 각 SecurityInterceptor당 한개의 AccessDecisionManager 를 둘 수 있습니다. 반면 Method 권한 판정은 Global 한 권한 위원회를 둡니다. 그래서 GlobalMethodSecurityConfiguration 을 통해 AccessDecisionManager 를 설정합니다. 인증이 모든 요청에 대해 공통적으로 처리해야 하는 것인데 반해 권한은 상황상황에 맞게 처리해야 하는 특징이 있습니다. 그래서 인증을 처리하는 코드는 필터와 어울리고, 권한은 interceptor 와 어울려 동작합니다. 필터는 servlet container 가 제공하는 구조를 스프링이 자체 f.. 2023. 9. 10.
[SpringSecurity] Authentication. 인증 💡 Authentication (인증)의 기본 구조 필터들 중에 일부 필터는 인증 정보에 관여한다. 이들 필터가 하는 일은 AuthenticationManager 를 통해 Authentication 을 인증하고 그 결과를 SecurityContextHolder 에 넣어주는 일입니다. 💡 Authentication에 들어가는 내용 Set authorities : 인증된 권한 정보 목록 principal : 인증 대상에 관한 정보로 사용자의 아이디 혹은 User객체가 저장된다. credentials : 인증 확인을 위한 정보로 주로 비밀번호가 온다. (※ 인증 후에는 보안을 위해 삭제한다.) details : 그 밖에 필요한 정보로 IP, 세션정보, 기타 인증요청에서 사용했던 정보들이 들어간다. boolea.. 2023. 9. 10.
[SpringSecurity] Security의 흐름 💡 서블릿 컨테이너 톰켓과 같은 웹 애플리케이션을 서블릿 컨테이너라고 부르는데, 이런 웹 애플리케이션(J2EE Application)은 기본적으로 필터와 서블릿으로 구성되어 있다. 필터는 체인처럼 엮여있기 때문에 filter chain이라고도 불리는데, 모든 request 는 이 필터 체인을 반드시 거쳐야만 서블릿 서비스에 도착하게 됩니다. 그래서 스프링 시큐리티는 DelegatingFilterProxy 라는 필터를 만들어 메인 필터체인에 끼워넣고, 그 아래 다시 SecurityFilterChain 그룹을 등록합니다. 이 필터체인은 반드시 한개 이상이고, url 패턴에 따라 적용되는 필터체인을 다르게 할 수 있다. 본래의 메인 필터를 반드시 통과해야만 서블릿에 들어갈 수 있는 단점을 보완하기 위해서 필터.. 2023. 9. 10.
[SpringSecurity] Spring Security란? 💡 필요 이유 웹사이트는 각종 서비스를 하기 위한 리소스와 서비스를 사용하는 유저들의 개인 정보를 가지고 있다. 이들 리소스를 보호하기 위해서 일반적으로 웹 사이트는 두가지 보안 정책을 설정해야 한다. [서버 리소스, 유저들의 개인정보] 💡 인증 (Authentication) 사이트에 접근하는 사람이 누구인지 시스템이 알아야 한다. 익명사용자(anonymous user)를 허용하는 경우도 있지만, 특정 리소스에 접근하거나 개인화된 사용성을 보장 받기 위해서는 반드시 로그인하는 과정이 필요하다. 로그인은 보통 username / password 를 입력하고 로그인하는 경우와 sns 사이트를 통해 인증을 대리하는 경우가 있다. [UsernamePassword 인증] Session 관리 토큰 관리 (sessi.. 2023. 9. 10.
728x90