본문 바로가기

Spring/Security

📝 Spring Security란? Spring Security 란? spring 기반의 어플리케이션의 보안을 담당하는 프레임 워크이다. ‘인증’ 과 ‘권한 ‘에 대한 부분을 filter 흐름에 따라 처리하며 filter는 Servlet으로 가기 전 가장 먼저 url 요청을 받는다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 인증**(Authentication)과 권한(Authorization)** 인증 사이트에 접속하려는 자가 누구인지 확인하는 절차 usernamepassword를 통해 인증(session, token 관리) sns로그인을 통한 인증 위임을 할 수도 있다 권한 사용자가 어떤 일을 할 수 있는지 권한 설정하는 절차 특정 페이지/리소.. 더보기
📝 OAuth란? OAuth를 사용하는 이유 보안의 수준을 알 수 없는 애플리케이션에서 일일히 계정을 만들어 사용하면 ID/PW 관리가 어렵고 개인정보가 유출되면 연쇄적으로 피해가 심각하기에, 보안 수준이 어느정도 검증된 사이트(ex, google, facebook)의 API를 이용해서 인증을 받는 방법이 보안상 좋기 때문이다. OAuth2 동장 방식 OAuth 인증 방식은 인증의 과정을 '타 서비스에게 위임'하는 인증방식. 예를 들어 내 사이트에 구글 로그인 인증을 넣었다고 해서 사용자가 구글 웹사이트에 직접 로그인하는 것이 아니라, 사용자의 정보는 내 사이트에서 관리하고, 구글 로그인 기능을 통해 구글에게 전송한 구글 계정 정보가 유효한지 확인한 후, 유효하다면 해당하는 구글 유저 정보 중 일부를 내 사이트에 제공해 .. 더보기
📝 JWT 토큰(JSON Web Token) 1. JWT(JSON Web Token) JSON 객체를 통해 안전한게 정보를 전송할 수 있는 웹 표준(RFC7519) 2. JWT의 구조 '.(마침표)'를 구분자로 암호화된 세 가지 데이터가 붙어있는 구조 1) 헤더(Header) alg: Verify Signature를 만드는 데 사용된 알고리즘 typ: 토큰의 타입. 이 부분은 언제나 고정값 'JWT' 2) Payload: DATA - 실제로 전달할 정보 - payload는 Base 64로 디코딩 하면 JSON 형식으로 여러 정보들을 포함하고 있음 (이 토큰을 누가 누구에게 발급했는지, 이 토큰이 언제까지 유효한지, 서비스가 사용자에게 이 토큰을 통해 공개하기를 원하는 내용 등) - 특히 토큰에 담긴 사용자 정보 등의 데이터를 claim이라고 하는데.. 더보기
📝 스프링 시큐리티를 사용하여 회원관리하는 방법 순서도로 정리하기 스프링 시큐리티 사용하지 않는 회원 관리의 흐름 스프링 시큐리티 사용하지 않는 회원 관리의 흐름 Client 의 요청은 모두 Spring Security를 거친다. Spring Security의 역할 인증과 인가 성공 시: Controller로 Client 요청 전달 Client 요청+ 사용자 정보 인증과 인가 실패 시: Controller 로 Client 요청 전달되지 않음 Client 에게 Error Response 보냄 더보기
JWT 로그인 구현 로그인 정보를 Server 에 저장하지 않고, Client 에 로그인정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가 모든 서버에서 동일한 Secret Key 소유 Secret Key 통한 암호화 / 위조 검증 (복호화 시) JWT 장/단점 장점 클라이언트에 로그인 정보를 저장하기 때문에 동시 접속자가 많을 때 서버 측 부하 낮춤 Client, Sever 가 다른 도메인을 사용할 때(CORS 문제) 예) 카카오 OAuth2 로그인 시 JWT Token 사용 단점 구현의 복잡도 증가 JWT 에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버) 기생성된 JWT 를 일부만 만료시킬 방법이 없음 Secret key 유출 시 JWT 조작 가능 JWT 사용 흐름 Overview Clien.. 더보기
OAuth2를 이용한 소셜 로그인 - 카카오 API 1. 필요성 1) 모든 웹 사이트에서 회원 가입 과정을 거치며 웹사이트마다 다른 아이디와 비밀번호를 기억해하므로 사용자에게 부담이 됨 2) 웹사이트 운영측에서도 회원들의 개인정보를 지켜야 하기때문에 보안 강화를 위한 노력이 지속적으로 필요하게됨 3) 이런 문제를 해결하기 위해 OAuth를 사용한 소셜 로그인 등장!! 2. OAuth - 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준 - 사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜 OAuth를 사용하는 서비스 제공자는 대표적으로 .. 더보기
SpringSecurity 스프링 시큐리티를 이용한 인증 및 인가 관리 개념 스프링 시큐리티(SpringSecurity) 인증, 인가, 일반적인 공격에 대한 보호를 제공하기 위한 프레임워크 스프링 시큐리티는 '인증'과 '권한'에 대한 부분을 필터(Filter) 흐름에 따라 처리하고 있다. 필터는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, (웹 컨테이너에서 관리) 인터셉터(Interceptor)는 Dispatcher와 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있다. (스프링 컨테이너에서 관리) 인증 구조 및 과정 주요 모듈 별 상세 역할 인증 필터 (AuthenticationFilter) 모든 요청에 대하여 AuthenticationFilter가 인증 및 권한 부여 과정을 거친 후 Dispatcher Serv.. 더보기
웹의 인증 및 인가 1. 웹의 인증 및 인가 2. 스프링 시큐리티를 이용한 인증 및 인가 3. OAuth2를 이용한 소셜 로그인 4. JWT를 이용한 로그인 웹의 인증 및 인가 1. 인증 및 인가 정의 인증 (Authentication): 사용자 신원을 확인하는 행위 -> 웹에서는 로그인을 통한 사용자 확인 인가 (Authorization): 사용자 권한을 확인하는 행위 -> 웹에서는 로그인 후, 사용 권한 확인 2. 웹의 인증 및 인가 1) 필요성 HTTP 는 상태를 저장하지 않기(Stateless) 때문에 사용자를 구별하지 못함 HTTP 에 상태 정보를 유지(Stateful)하기 위해 쿠키와 세션을 사용함 쿠키(Cookie): 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 세션(Sessoin): 서버에서 일.. 더보기