spring/security
-
Spring boot 2.x 와 Spring security Oauth2 연동spring/security 2021. 4. 21. 20:05
배경 진행 중인 프로젝트는 SSO(Single Sign On) 방식을 지원하지 않는다. 어떤 사용자든 서비스를 이용하기 위해서 신규회원으로 가입해야 한다. 네이버 로그인을 지원해 사용자의 편의성을 높여보자. docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2login-sample-boot 위 내용을 참고 및 공부하는 내용이다. 큰 그림 - 유저는(Resource Owner) 서비스서버에게(Client) OAuth2.0방식 로그인을 요청한다. - 서비스서버는 유저를 몇몇 정보와 함께 인증서버로(Service API) 리다이렉트한다. - 유저는 인증서버에서 인증을 진행한다. - 인증서버는 유저를 서비스서버의 callbackURL로..
-
Spring Security에서 CORS 해결spring/security 2021. 3. 24. 15:30
배경 한 서버에서 데이터와 정적파일을 같이 렌더링해 사용자의 요청을 처리하는 방식이 아닌 프런트서버와 api서버를 분리하여 프로젝트를 진행했다. 테스트 방식은 먼저 postman을 이용해 올바른 응답을 받는지 테스트하고 그 다음 프런트서버를 띄우고 브라우저를 통해 api서버와 통신하는 테스트를 진행했다. 그런데 api서버의 코드는 전혀 바뀐 바가 없었는데 postman을 이용해 테스트할 때는 정상적인 응답을 하던 서버가 프런트서버를 띄운 뒤 브라우저를 통해 테스트할 때는 오류가 났던 것이다. 파헤쳐보자. 테스트 과정 코드를 보면 알겠지만 localhost:8080/hello로 get요청을 보내면 hello란 스트링을 body에 담아 전달하는 아주 흔한 통신이다. 결과는 당연히 성공이다. 이제 react의..
-
SecurityContextHolder의 역할 및 원리spring/security 2021. 3. 3. 13:55
배경 WAS를 구성할 때 유저의 인증 인가를 관리하는 프레임워크로 spring security를 선택했다면securityContextHolder를 사용해본 경험이 있을 거다. 지금 내 프로젝트에서도 비지니스로직에서 게시물을저장할 때 SecurityContextHolder를 사용해 게시물의 작성자를 등록하고 있다.(이렇게 비지니스로직에 기술종속적 코드가 나오는 게 안 좋은 것 같긴 하다 => 아규먼트리졸버로 미리 처리) SecurityContextHolder의 역할은 간단하다. 객체의 세션을 CRUD하는 API를 제공하고 사용하면 그만이다. 하지만 본인은 코드 상에서 세션을 따로 저장한 적도 없을 뿐더러 세션을 get할 때 HttpRequest를 파라미터로 제공하는 웹 기술에 종속적인 방식을 사용하지 않는..
-
Spring Security 아키텍처spring/security 2021. 2. 21. 01:29
늘 그렇듯 아키텍처를 이해하는 게 모든 커스터마이징의 기본이다. 현재 프로젝트의 세션 관리는 전부 was내에서 처리한다. 나중에 서비스가 커져서 was를 분산하거나, 한 was에 모든 세션을 저장하기 부담스러운 상황이 온다면? redis를 이용해 세션을 was에서 분리하는 목표를 세웠다. 그전에, servlet으로 가기 이전인 filter기반으로 동작하는 스프링 시큐리티 아키텍처를 이해해보자. 스프링 WAS의 큰 그림 클라이언트의 요청이 오면 요청은 FilterChain으로 이루어진 Filter를 하나씩 거치게 된다. 모든 Filter를 거친 후 최종적으로 servlet에 요청을 위임한다. 이때 spring security는 servlet에게 요청을 위임하기 전에 인증, 인가만 따로 처리하는 하나의 Fi..