Authentication & Authorization
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
2023.06.19Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation) 문제 상황1. 유효기간이 긴 Refresh Token이 탈취된 경우-> 이 경우는 간단히 Refresh Token Rotation을 떠올릴 수 있다. 하지만 아래의 문제까지 커버가 가능할까?2. 탈취한 Refresh Token으로 정상 유저보다 먼저 Access Token을 재발급 받는 경우-> Refresh Token Rotation을 적용 해도, 정상유저보다 먼저 Refresh Token을 재발급 받으면 어떻게 해야하나?3. 토큰이 탈취된 경우, 한 명의 사용자에 Refresh Token이 여러개 생성되는 경우-> 여러개 생성된 Refresh Token을 가지고 각각 Access Token을 발급받을 수..
Redis를 사용하는 이유 (feat. Refresh Token)
Redis를 사용하는 이유 (feat. Refresh Token)
2023.06.18왜 Redis를 사용하는가? Redis는 key-value 쌍으로 데이터를 관리할 수 있는 데이터 스토리지이다. 데이터베이스라고 표현하지 않은 이유는 기본적으로 Redis는 In-Memory 로 데이터를 관리하므로, 저장된 데이터가 영속적이지 않기 때문이다. Redis는 Remote Dictionary Server의 약자로 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 비관계형(NoSQL) 데이터베이스 관리 시스템(DBMS)이다. 데이터가 HDD나 SDD가 아니라 RAM에 저장되어지기 때문에 데이터를 영구적으로 저장할 수 없는 대신, 굉장히 빠른 액세스 속도를 보장받을 수 있다. 빠른 액세스 속도와 휘발성 이라는 특징으로 보통 캐시의 용도로 Redis를 사용한다. Refresh Tok..
Access Token의 문제점과 Refresh Token
Access Token의 문제점과 Refresh Token
2023.06.17Access Token의 문제점 사용자의 잦은 로그아웃 경험 다음과 같이 가정하자. A라는 서비스가 있다. A라는 서비스에서는 Refresh Token을 사용중이지 않다. Access Token만을 사용하여 사용자를 인증/인가 한다. A서비스의 Access Token 유효기한은 24시간, 즉 하루다. 로그인을 한 이후 하루가 지나면, A 서비스의 사용자는 A 서비스에서 로그아웃 되는 경험을 하게 될 것이다. 그렇다고 Access Token의 유효 기간을 길게 하자니, 바로 뒤에 이야기할 보안 문제가 발생한다. 보안 문제 사실 Refresh Token을 사용하는 가장 큰 이유가 아닐까 싶다. JWT 직접 만들어보며 이해하기 와 세션 기반 인증과 토큰 기반 인증(feat. Authentication 과 Au..
다중 서버 환경에서의 세션 불일치 문제와 해결 방법
다중 서버 환경에서의 세션 불일치 문제와 해결 방법
2023.06.16다중 서버 환경에서의 세션 불일치 문제와 해결 방법 세션 불일치 문제는 단일 서버 환경에서는 발생하지 않으므로 따로 걱정하지 않아도 된다. 하지만, 최근 웹 서비스는 대부분 수직 확장(Scale Up)이 아닌 수평 확장(Scale out) 으로 서버를 확장하기 때문에 일반적으로 다중 서버 환경일 것 이다. 이런 다중 서버 환경에서는 세션 불일치 문제가 발생할 수 있다. 기본적으로 세션은 서버의 메모리(RAM)에 저장되기 때문이다. 예를 들어, 우리가 서버를 수평적으로 확장하기 위해 A, B, C 총 3대의 서버를 설치했다고 가정하자. 이때, 로드 밸런서는 유저의 요청이 들어올 때 마다 A -> B -> C -> A ... 순서대로 요청을 분산 한다고 가정하자.(이를 라운드로빈 방식이라고 한다.) 가운데 ..
세션 기반 인증과 토큰 기반 인증(feat. Authentication 과 Authorization)
세션 기반 인증과 토큰 기반 인증(feat. Authentication 과 Authorization)
2023.06.16인증과 인가 세션기반 인가와 토큰기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야 할 필요가 있다. 인증과 인가를 같거나 비슷한 개념이라고 생각하는 사람들이 많을텐데, 엄밀하게는 서로 다른 개념이다. 인증과 인가는 요약하자면 시스템의 자원을 적절하고 유효한 사용자에게 전달하고 공개하는 방법이다. 인증(Authentication) 인증은 쉽게 말하자면, 로그인 이다. 클라이언트가 자기자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정이다. 예를 들어 로그인 화면에서 내가 유저 아이디를 USER1 로 입력하고 패스워드를 입력해 제출하면, 서버에서는 내가 진짜로 USER1 이라는 유저가 맞는지 확인한다. 인가(Authorization) 인가는 인증 작업 이후에 행해지는 작업으로..
쿠키와 세션 (feat. HTTP의 Connectionless 와 Stateless)
쿠키와 세션 (feat. HTTP의 Connectionless 와 Stateless)
2023.06.16HTTP의 Connectionless와 Stateless HTTP는 요청과 응답을 한번 주고받으면 바로 연결을 끊어버리는 특성을 가지고 있다. 그리고 다음 요청을 하기 위해 다시 연결을 맺어야 한다. 이를 HTTP의 Connectionless(비연결성) 라고 한다. 또한 HTTP 프로토콜은 요청과 응답을 교환하는 동안 상태(Status)를 저장하지 않는다. 따라서 HTTP 레벨에서는 이전에 보냈던 request나 response를 기억하지 못한다. 즉, HTTP 요청은 직전의 요청과 전혀 관련이 없다. 이를 HTTP의 Stateless(비상태성) 라고 한다. HTTP가 상태를 갖지 않음으로서 연결을 맺을 때 발생하는 오버헤드가 줄어들고, 데이터를 빠르고 확실하게 처리할 수 있다. 또한 요청간의 상태를 공..