분류 전체보기154 MSA 기반 환경에서의 인증과 인가 - 3. 토큰 탈취 대처 Session이 아닌 JWT 기반의 토큰을 사용하여 보안을 처리하는 경우 토큰 탈취에 대한 이슈에 민감하며 이에 대해 충분한 대처가 필요하다. (단지 토큰 사용 시 뿐만아니라 모든 보안 이슈는 민감하게 다뤄져야한다) 이번 포스팅에서는 서버 입장에서 토큰 탈취 시 어떤 식으로 보안 이슈를 최소화할 수 있을 지에 대해 고민하고 적용한 것에 대해 정리해본다. Access Token 탈취 Access Token을 통해 직접적으로 요청에 대한 인가 처리를 수행하기 때문에 이 토큰이 탈취되면 꽤나 치명적이다. 또한 서버에서는 왠만하면 인증(로그인)이 완료되면 Access Token을 발급은 해주지만, 발급된 Access Token의 유효성을 관리하기 위해 DB에 저장하지 않을 것이다. (사용자 보안에 대해 하나하나.. 2021. 5. 29. MSA 기반 환경에서의 인증과 인가 - 2. 인증 및 인가 프로세스 앞서 MSA 환경에서의 어떤 식으로 인증과 인가 시스템을 구현할 것인가에 대해 대략적인 개요를 살펴보았다. 이번 포스팅에서는 구체적으로 어떤식으로 인증과 인가 프로세스를 밟아 나가는지에 대해 살펴보자. 인증 (Authentication) 흔히 로그인이라고 부르는 인증(Authentication)은 특정 계정에 대해 소유를 확인하는 과정이다. 흔히 ID, Password 를 사용하거나 OAuth 등을 사용하여 인증 과정을 거친다. 1. Client 에서 ID, Password 와 같은 인증 수단의 데이터를 담아 인증(로그인) 요청을 보내면 API Gateway에서 해당 요청을 인증 서버에 라우팅 할 것이다. 2. 이때 인증 서버에서 인증이 성공했을 때 Access Token과 Refresh Token을 응.. 2021. 5. 29. MSA 기반 환경에서의 인증과 인가 - 1. 개요 서비스가 성장하고 서비스에서 다루는 도메인이 복잡해 짐에 따라 도메인 별로 서비스를 분해하여 각 도메인 간의 커플링을 느슨하게하고 도메인의 응집도를 높이며 이를 통해 빠르고 안정적인 개발이라는 장점을 취하기 위해 MSA를 행하는 곳이 많아졌다. 그리고 내가 속한 조직 역시 기존 monolithic 환경에서 MSA로 이전하는 작업을 진행 중이고 그 중에서 나는 사용자와 인증/인가 관련 서비스를 작업하였다. 이 포스팅은 MSA 환경에서 인증/인가를 구현하면서 어떤 식으로 시스템을 구축하였고 어떤 고민을 하였는지에 대해 정리하는 글이다. 웹 서비스에서 크게 Session 또는 JWT(JSON Web Tokens)기반의 Access Token을 통해 Security를 구현한다. MSA 환경에서 인증과 인가에 대.. 2021. 5. 20. Github Actions로 PR 시 테스트를 돌려보자 PR을 올릴 때 Github Actions로 테스트를 돌려서 해당 PR에 대해 깨지는 테스트가 없는지 확인하는 세팅을 해보자. 코드는 여기에 예제 PR은 여기에서 확인할 수 있다. Github Actions에 Gradle Test 추가 .github/workflows/{파일명}.yml 으로 Github Actions 파일을 추가한다. name: PR Test on: pull_request: branches: [ master ] # master branch에 PR을 보낼 때 실행 jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v1 with: ja.. 2021. 4. 21. MySQL Docker container를 이용한 통합 테스트 시 한글 깨짐 이슈 Spring Application 통합 테스트 시 H2 같은 in-memory DB를 사용할 수 있지만 최대한 운영 환경과 유사한 상황에서 테스트하고자 한다면 Testcontainers를 통해 테스트 용 DB container를 띄우는 방식도 고려할 수 있을 것이다. 이번 포스팅은 MySQL Docker container를 사용하여 통합 테스트 시 인코딩 관련 이슈와 이를 해결하기 위해 인코딩 설정하는 방법에 대해 알아보겠다. 관련 코드는 여기에서 확인 가능하다. 인코딩 관련 이슈를 테스트를 재현하기 위해 MySQL, JPA dependency를 추가하고 SpringBoot Application을 생성한 뒤 Testcontainers JDBC MySQL depdencey를 추가한다. 그리고 다음과 같이 .. 2021. 4. 7. Servlet Filter의 response의 PrintWriter를 close 해야할까? Spring으로 웹개발을 하다보면 Security 등의 이유로 Servlet Filter를 사용할 때가 있다. 코드를 예로 들면 아래와 같다. import javax.servlet.Filter import javax.servlet.FilterChain import javax.servlet.ServletRequest import javax.servlet.ServletResponse import javax.servlet.http.HttpServletRequest class MyFilter : Filter { override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) { request as HttpSe.. 2021. 2. 24. 이전 1 ··· 19 20 21 22 23 24 25 26 다음