본문 바로가기

ETC28

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.
코드리뷰에 대하여 왜 우리는 코드리뷰를 하는가?에 대해 사내에 발표하기 위한 자료를 정리하여 올립니다. 이 포스팅은 정답이 아닌 개인적인 의견과 관점이고 팀마다 상황이 다르고 조직마다 지향하는 바가 다르기에 상황에 맞게 적절한 전략으로 코드리뷰를 진행하는 것이 좋다고 생각합니다. :) Why? 우리는 왜 코드리뷰를 하는가? 버그가 될 수 있는 부분을 사전에 파악하기 위해 코드의 성능, 가독성을 증가시키기 위해 팀 코드 스타일의 일관성 유지시키기 위해 새로운 feature 코드를 공유하고 잠수함 패치를 방지하기 위해 작업한 사람을 탓하지 않기 위해 (책임을 분배하기 위해) ⭐️ 서로의 코드를 통해 배울 수 있음 Reviewer를 통해 배우기 val inputStream = new FileInputStream("text.tx.. 2021. 2. 24.
WebSocket Server에서 Connection 'close' 이벤트를 받지 못할 때 (2020-08-17에 작성된 글입니다) WebSocket 서버를 운영하다보면 가끔 Client WebSocket Connection이 끊겨졌음에도 서버에서는 close이벤트를 수신하지 못할 때가 있다. 아마 WebSocket 서버에서 WebSocket Connection이 close될 때 해당 Connection과 관련된 데이터를 정리하는 코드를 작성해놨을텐데, close 이벤트가 제대로 동작하질 않으니 이 데이터 정리 코드가 실행되지 않을 것이고 이는 곧 버그로 이어질 가능성이 높다. 나도 WebSocket을 사용한 실시간 서비스 서버를 개발하면서 이러한 문제를 겪었고 그 원인에 대해 찾아보고 대처를 한 것에 대해 정리하고자 이 글을 포스팅한다. 먼저 내가 해당 문제를 재현한 방법은 WebSocket.. 2021. 1. 6.
BCrypt로 Password Hashing 하기 (2020-04-30에 작성된 글입니다) 사용자의 비밀번호와 같은 credential한 값은 hashing을 통해 관리자 조차도 원래 값을 알 수 없도록 암호화하여 저장해야한다. 이번 포스팅은 비밀번호 암호화 관련하여 BCrypt를 적용한 것과 관련하여 알아본 바를 정리한다. (* update 2021-01-02: 요즘은 Argon2라는 알고리즘이 떠오르는 것 같다.) SHA는 사용하지 마라 일반적으로 Hashing에 사용되는 SHA 방식의 경우 비밀번호와 같은 보안과 관련되서는 사용되지 않는다. 왜냐하면 SHA 방식은 빠르기 때문에 해커들이 반복 연산을 보다 빠르게 할 수 있기 때문이다. 이는 해커가 비밀번호를 얻어내기 좀 더 수월하다는 위험성을 갖는다. 왜 BCrypt를 사용하는가 BCrypt 같은 .. 2021. 1. 2.