Cookie🍪
Cookie란 서버가 클라이언트에게 전달하는 작은 데이터로 쿠키를 이용해 서버가 클라이언트에 영속성 있는 데이터를 저장하고 원한다면 클라이언트의 쿠키를 이용하여 데이터를 가져올 수 있다. 즉, 쿠키를 이용한다는 것은 서버가 클라이언트에게 쿠키를 전송하는 것 뿐만 아니라 클라이언트가 서버로 쿠키를 다시 전송하는 것도 포함된다.
- 서버 → 클라이언트로 쿠키 전송 시
: 헤더에Set-Cookie
라는 프로퍼티를 사용해 쿠키를 담아 전송- 클라이언트 → 서버로 쿠키 전송 시
: 헤더에Cookie
라는 프로퍼티를 사용해 쿠키를 담아 전송
Domain
옵션과 서버의 도메인이 일치하는 경우 쿠키 전송Pate
옵션과 서버의 세부경로가 일치하는 경우 쿠키 전송 MaxAge
: 쿠키가 유효한 시간을 초 단위로 설정Expires
: 쿠키의 유효 시점(날짜)까지 지정 가능MaxAge
또는 Expires
옵션이 없는 쿠키로 브라우저 실행 시 임시로 사용 가능하며 브라우저 종료 시 해당 쿠키 삭제MaxAge
또는 Expires
에 설정된 유효시간동안 사용할 수 있는 쿠키Secure
옵션이 true
일 경우 HTTPS를 이용하는 경우에만 쿠키 전송 가능true
로 설정된 경우 자바스크립트를 통해 쿠키에 접근 불가false
가 default이므로 이 경우 XSS 공격에 취약Lax
: CORS 요청 시 GET 메서드에 대해서만 쿠키 전송 가능Strict
: same-site인 경우에만 쿠키 전송 가능None
: 모든 메서드 요청에 대해 쿠키 전송 가능(단, 쿠키 옵션 중 Secure
옵션 필요)Axios vs Fetch API
Axios | Fetch API |
---|---|
써드파티 라이브러리로 별도의 설치 필요 | 빌트인 API라 별도의 설치 필요x |
자동으로 JSON 데이터 형식으로 변환 | .json()메서드 사용해야 함 |
Axios 사용법
npm install axios
axios.get("url", [,config])
Session👌🏼
Session이란 서버와 클라이언트 간 연결이 활성화된 상태를 말한다. 세션은 서버에 저장되며 데이터를 서버에서 관리한다. Session 이용 시 서버는 쿠키에 암호화된 Id만 부여한다.
Cookie&Session
설명 | 접속 상태 저장 경로 | 장점 | 단점 | |
---|---|---|---|---|
Cookie | 쿠키는 그저 http의 stateless를 보완해주는 도구 | 클라이언트 | 서버의 부담을 덜어줌 | 쿠키 그 자체는 인증이 아님 |
Session | 접속 상태를 서버가 가짐 (Staetful) 접속 상태와 권한 부여를 위해 세션 아이디를 쿠키로 전송 | 서버 | 신뢰할 수 있는 유저인지 서버에서 추가로 확인 가능 | 하나의 서버에서만 접속상태를 가지므로 분산에 불리 |
세션 기반 인증(Session-based Authentication)
<로그인 상황>
서버: 사용자가 인증에 성공한 상태를 알고 있어야 함
클라이언트: 인증 성공 증명 수단을 가지고 있어야 함
<로그아웃 상황>
서버: 세션 정보를 삭제해야 함(서버 → 세션이 저장)
클라이언트: 쿠키를 갱신해야 함(클라이언트 → 세션 아이디가 담긴 쿠키가 저장)
set-cookie
로 클라이언트에게 쿠키 전송 시 세견 아이디의 키 값을 무효한 값으로 갱신 가능Express-session
Hashing🔐
Hashing이란 암호화 방식 중 하나로 복호화가 불가능한 방식이다. Hashing은 해시 함수를 사용하여 암호화를 진행한다.
레인보우 테이블과 솔트(salt)
해싱의 목적🤓
해싱은 민감한 데이터를 다루어야 하는 상황에서 데이터 유출 위험성은 낮추고 데이터의 유효성을 검증하기 위해 사용되는 방식으로 단방향 암호화 방식이다. 예를 들어, 사용자가 비밀번호를 입력하여 사이트에 접속할 경우 서버에서는 해싱한 값끼리 비교하여 일치 여부만 판단하기 때문에 비밀번호 유출 위험성을 줄일 수 있다.
토큰 기반 인증(Token-based Authentication)
: 클라이언트에서 인증 정보를 보관하는 방법으로 고안
JWT🪙
JWT란 대표적인 토큰기반 인증으로 JSON 포맷으로 사용자에 대한 속성을 저장하는 웹토큰으로 권한 부여에 유용하게 사용된다.
토큰기반 인증의 장점
1. Statelessness & Scalability (무상태성 & 확장성)
2. 안정성
3. 어디서나 생성 가능
4. 권한 부여에 용이
OAuth🤝
OAuth란 인증을 중개해주는 매커니즘을 말하는데 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜을 의미한다.
OAuth의 필요성
OAuth 사용 시 관련 용어
Resource Owner
: 사용자이자 정보 제공자Client
: 보호된 리소스에 액세스하는 애플리케이션Local Server
: Client의 요청을 수락하고 응답할 수 있는 서버Resource Server
: 사용자의 정보를 저장하고 있는 서버Authorization Server
: 인증을 담당하고 있는 서버로 Access Token 발급Authorization Grant
: Client가 Access Token을 얻는 방법Authorization Code
: Access Token을 발급받기 위한 CodeAccess Token
: 보호된 리소스에 액세스 할 경우 사용되는 인증 토큰 Refresh Token
: 발급받은 Access Token이 만료될 시 재발급을 받을 수 있도록 하는 TokenOAuth 인증 흐름
1. Authorization Code Grant Type
: Authorization Code를 통해 Access Token을 받는 방식
2. Refresh Token Grant Type
: Access Token이 만료된 경우 Refresh Token을 활용해 새로운 Access Token으로 교환하는 경우 사용
<오늘의 일기>
정말 웬만하면 어렵다고 하지 않기 위해 노력하는 편이지만 이번 유닛은 정말 어려웠다.. 백엔드 개발자가 아니더라도 흐름은 이해하고 있어야 하기에 열심히 공부했지만 이해하기 쉽지 않았다..ㅎ 이해하기 만만치 않은 유닛이었지만 페어분께서 많이 도와주신 덕분에 그래도 조금이나마 이해하며 넘어갈 수 있었던 것 같다. 나도 나중에는 누군가에게 도움이 될 수 있는 개발자로 성장할 수 있길..🙏