로그인 복습

Daisy🌼·2022년 9월 23일
0

220923 작성중...

🍪 쿠키

쿠키는 서버에서 클라이언트에 데이터를 저장하는 방법입니다.

→ 서버가 데이터를 저장하고 가져오는 방법

how? 클라이언트에게 정보가 담긴 쿠키를 전달함으로써

즉 쿠키는 서버와 클라이언트 양방향으로 오고간다!

쿠키 옵션

MaxAge

초단위로 쿠키의 유효 시간을 설정 → 시한부 선고하는 의사 (🧑‍⚕️: “3개월 정도 남으셨습니다.”)

Expires

쿠키의 만기를 설정 → 언제 죽는다고 통보하는 저승사자(🧛: “너는 00월 00일에 죽는다.”)

same-site

Cross-Origin 요청을 받는 경우 서버의 쿠키 전달 여부를 결정하는 옵션입니다. 예를 들어 유저가 로그인을 시도할 때 서버에서 쿠키를 전달할 때 적용되는 옵션을 지정합니다.

  • Lax(느슨한): Strinct에 비해 느슨합니다. → GET 요청에 대해 쿠키 전송 허용
  • Strict: 가장 엄격합니다. → same-origin일 때만 쿠키 전송 허용
  • None: 가장 관대합니다 → 언제나 쿠키 전송 허용
✔️ same-site 옵션을 None으로 지정할 경우, 보안에 취약하기 때문에 `secure: true` 옵션을 추가해줍니다.

🔑 세션

서버에 유저 정보를 담는 인증 방식

세션이란 인증 여부를 나타내는 상태를 의미합니다. → “인증에 성공한 유저야!” 라는걸 나타내는 상태

인증 성공 여부인 세션들을 구분하기 위해 아이디로 저장합니다.

→ 중요한 유저 데이터를 암호화된 세션 아이디로 저장

세션 아이디: 세션 성공을 증명하는 수단

로그인을 유지하기 위한 수단으로 쿠키를 사용

쿠키에는 세션 아이디가 저장

클라이언트가 서버에게 쿠키를 전달하면 세션 아이디도 전달될거고,

서버는 전달받은 세션 아이디가 자신의 세션 스토어에 존재하는지 여부를 확인합니다.

✔️ 세션은 세션 아이디로만 인증 여부를 판단합니다. 따라서 로그아웃 요청이 들어오면 서버는 세션 정보를 삭제하고, 세션 아이디의 키 값을 무효한 값으로 갱신해줍니다. ✔️ 자꾸 쿠키가 나와서 헷갈릴 수도 있는데, 쿠키는 인증 방식이 아니라 단지 서버가 클라이언트에 정보를 저장하는 방법, 수단입니다. 즉 세션 기반 인증에서 로그인을 유지하기 위한 수단으로서 쿠키를 사용합니다. → 세션 정보는 서버에 저장되고, 세션(인증 성공 여부)을 유지하기 위해 쿠키에 세션 아이디를 저장합니다.

인증(authentication) vs 인가(authorization)

  • 인증: “증”명 → 증명함 → “이 사람이 우리 유저임을 증명합니다.”
  • 인가: 허”가” → 인증하여 허가함. → “이 사람이 마이페이지에 접속하는 것을 허가합니다.”

🔑 토큰

세션 기반 인증을 보완한 방식

→ 도대체 무엇을 보완한건가요?

서버의 부담을 보완했습니다!

→ 세션 기반 인증이 왜 서버에 부담이 되나요?

→ 세션 기반 인증 자체가 서버에 유저 정보를 담는 방식이고, 요청이 들어올 때마다 클라이언트가 가지고 있는 세션 아이디와 서버가 가지고 있는 세션 객체를 비교하면서 확인해야 합니다. 만약 1억명의 유저가 있다면?(생활코딩에서 배운 효율성을 깨닫기 위한 극단적 사고 방식) 1억 번의 세션 확인 과정이 필요하겠죠.

서버의 부담을 덜어낼 수 있는 방법은 역시 클라이언트가 그 부담을 나눠갖는 것입니다. 토큰 기반 인증은 세션과 달리 클라이언트에 인증 정보를 저장하는 방식입니다. + 암호화해서!

토큰 기반 인증은 액세스 토큰과 리프레시 토큰을 이용해 인증을 구현합니다.

1. 액세스 토큰

유저의 민감한 정보에 접근할 권한을 얻는 데 사용하는 토큰

2. 리프레시 토큰

액세스 토큰의 유효기간이 만료됐을 때 새로운 액세스 토큰을 발급받는 데 사용하는 토큰

profile
커피와 재즈를 좋아하는 코린이 | 좋은 글 좋은 코드를 쓰고 싶습니다

0개의 댓글