목록web (7)
개발일지
공통점stateless한 HTTP를 보완하기 위해 사용되는 데이터 저장 기술이다.브라우저에 노출되므로, 보안을 위해 중요한 정보는 포함하지 않는 것이 좋다. 쿠키 (Cookie)서버 측에서 생성하고 관리하는 기술이다. 서버는 사용할 쿠키를 헤더를 통해 클라이언트 측에 전달하며, 이후 클라이언트는 모든 서버 요청에 해당 쿠키를 자동으로 포함하여 전송한다.쿠키를 적용할 도메인이나 경로, 만료 기간, 보안 등을 설정할 수 있다.만료 기간이 지나면 자동으로 삭제된다. 따로 설정하지 않으면 세션 쿠키가 되어 브라우저가 종료될 때까지 유지된다.최대 4KB의 저장 용량을 갖는다.사용자 인증, 사용자 추적 및 세션 관리, 팝업 창 “오늘 하루 보지 않기” 등 웹 스토리지(Web Storage)클라이언트 측에서 데이..
개요지난 번 사용자 인증/인가 방식으로 JWT를 적용했습니다. JWT는 토큰 그 자체만으로도 검증이 가능하기 때문에 별도의 저장공간을 필요로 하지않는다는 장점이 있습니다. 그러나 단점 역시 존재합니다. 설정한 기간이 만료되기 전까지 토큰은 유효하기 때문에 탈취될 경우 유효기간이 만료되기 전까지는 손을 쓸 수 없게 됩니다. 이러한 점을 방지하기위해 두가지 방식을 도입했습니다.1) Refresh 토큰 도입; Refresh 토큰은 오직 Access 토큰 재발급 용도로 사용되며 Access 토큰의 유효 기간을 짧게 설정할 수 있어 비교적 안전합니다.2) JWT blacklist 도입; Refresh 토큰 발급 시 DB에 저장합니다. 재발급 요청 시에 토큰이 DB에 존재하는지 확인하는 과정을 거쳐 존재하지..
OAuth(Open Authorization)란?"자신이 소유한 리소스에 다른 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜" . 우리가 흔히 사용하는 구글, 카카오 간편 로그인 기능도 OAuth2.0 프로토콜을 기반으로 한다. 탄생 배경OAuth 이전에도 사용자의 아이디와 패스워드가 노출되지 않도록 하면서 API 접근 위임이 가능한 인증 방법이 존재했다. 구글과 야후, 아마존 등에서 각각의 인증 방식을 제작하여 사용했다. 그러던 도중 트위터 개발자와 Gnolia의 개발자가 만나 표준안에 대한 논의를 거쳤고 마침내 OAuth 등장, 2010년에는 OAuth 1.0 표준안인 (RFC5849) 가 발표되었다. 현재에는 OAuth2.0가..
JWT 문제점Weak algorithmsJWT는 여러 알고리즘을 제공하는데 그 중에는 보안에 취약한 알고리즘도 포함된다.Trivial Forgery어떻게 구현하냐에 따라 위조가 쉬운 토큰을 양산할 수 있다.JWT는 토큰 헤더에 서명 알고리즘을 포함한다.공격자가 alg 헤더에 None을 지정하면 인증을 우회할 수 있다. 또는 서버가 비대칭 알고리즘을 쓴다는 것을 알면서도 대칭키 알고리즘(ex.HS256)으로 변경하여 요청할 수 있다. 예시) 서버의 RSA 공개 키는 공개적으로 알려져있다. 해커는 alg 헤더를 HS256 대칭 키 알고리즘으로 설정한 후, 공개키로 가짜 토큰을 생성한다. 서버 측에서는 alg 헤더에 명시된 대로 HS256 알고리즘과 서버의 공개키로 인증 요..
JWT(Json Web Token)지난 포스트에서 토큰 기반 인증 시스템에 대해 알아보았다. 이번 포스트에서는 토큰 기반 인증 시스템의 구현체인 JWT(Json Web Token)에 대해 알아보고자 한다. JWT란?JSON Web Token(JWT)은 웹 표준(RFC 7519)으로서 두 개체 간에 정보를 안전하고 간결하게 전송하기 위한 방법을 정의한다. Json 포맷을 사용하여 자가수용적(self-contained) 방식으로 사용자 정보를 저장한다. JWT는 다음과 같은 특성을 가진다.웹 표준으로서 C, Jave, Python, JavaScript 등 대부분의 주류 프로그래밍 언어에서 지원된다.자가수용적 (self-contained)이다. JWT는 토큰 정보, 전달할 정보, 검증됐..
토큰 (Token)인증을 위해 사용되는 암호화 된 문자열 토큰 기반 인증 방식사용자가 로그인을 요청하면 서버에서는 어떠한 데이터를 기반으로 인증 가능한 토큰을 생성해 클라이언트에 전달한다. 클라이언트는 요청 시 토큰과 함께 요청하고 서버는 토큰에 대한 유효성을 검사하여 사용자의 인증 여부를 판별한다.토큰 방식은 토큰의 유효성 검증과 유저의 인증을 별도로 분리할 수도 있다. 예를 들어 구글 로그인을 하면 구글 유저 인증 서버에 접근할 수 있는 토큰을 발급해준다. 이 토큰을 다시 구글 유저 인증 서버로 보내 사용자를 인증할 수 있다.jwt는 토큰 유효성을 확인하기 위한 별도의 서버를 거치지 않고도 jwt 토큰 자체를 해석하여 유저를 검증할 수 있도록 한다. 동작 방식사용자..
+) 240907 틀린 개념만 수정했습니다. 쿠키와 세션을 사용하는 이유? HTTP 프로토콜 환경은 stateless한 특성을 가지기 때문에 서버에서는 클라이언트가 누구인지 매번 확인해야한다. 예를 들어 쇼핑몰에 로그인을 했음에도 페이지를 이동할 때마다 계속 로그인을 해줘야하는 문제가 발생한다. 쿠키와 세션을 사용해 이러한 점을 보완할 수 있다. 무상태성 (Stateless)서버는 클라이언트의 이전 상태를 보존하지 않는다. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지되지 않는다. 쿠키 (Cookie)쿠키란?서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 이 데이터 조각들을 저장하고 있다가, 동일한 서버에 재요청할 때 함께 전송한다.서버는 HTTP 요청..