로그인 기능, 토큰&JWT

Goofi·2023년 8월 31일

로그인 기능의 이해

회원가입

email, password, ...를 전달 및 서버에서 원하는 추가 정보를 전달하게 된다.

const 이태형 = {
   email : 'spdhsrnvl123@naver.com',
   password : "dlxogud12",
   contury : 'korea',
   job : 'developer',
}

로그인

로그인 할 때 서버는 토큰을 가지고 유저를 기억한다.
→ 서버는 유저에게 토큰을 주면서 유저야 이 토큰을 가지고 앞으로 요청을 해라

토큰

  • 서버가, 각각의 클라이언트를 누군지 정확히 구별할 수 있도록, 유니크한 정보를 담은 암호화 데이터.
  • 유저 구별이 가능해야, 유저의 권한에 맞는 정확한 기능을 응답할 수 있다.
    ( 사용자 구분 및 정보 유출방지 )

로그인과정

1)로그인

eamil, password를 입력하여 서버에게 보내면 회원가입 했을 때의 보낸 이메일'spdhsrnvl123@naver.com'비밀번호'reset123' 데이터를 떠오르게 된다.

2)로그인 이후

header에 토큰을 넣고 요청을 한다.

예시) 유튜브에서 로그인 한 상태에서 검색창에 '조코딩'이라 검색하면 토큰을 포함해서 보내준다.

해당 토큰은 요청헤더 쿠키안에 있으며 알아 볼 수 없는 암호화된 문자열로 이루어저 있다.

토큰 & JWT

토큰이란

  • 디지털민증 같은 것
  • 신원 증명

토큰 기반 로그인의 흐름

  1. 클라이언트가 로그인 요청
  2. 서버 토큰 발급 및 전달
  3. 클라이언트 토큰 보관
  4. 클라이언트는 토큰을 사용해 요청

실제 서비스에서의 구조

  • 로그인 후 로그인 상태 유지
  • 자동 로그인

JWT(JSON Web Token)

토큰이다.

JWT가 토큰이 맞는데 뭐하는 기술인가?
RSP 기술표준 규격에서 정의되어있다.
RSP - 기술표준 규격이다.

JWT 안에는 무엇이 들어 있을까?

HEADER.PAYLOAD.SIGNATURE

  • 암호화 규칙
  • 토큰 타입

형태)

  "alg" : "HS256",
  "typ" : "JWT"

PAYLOAD

  • 데이터(클레임)
  • 실제 클라이언트에서 보낼 데이터가 들어가 있다.
  • 패스워드 넣으면 안된다.
    형태)
  "sub" : "1234567890",
  "name" : "John Doe",
  "iat" : 1516239022

SIGNATURE

  • 암호화를 위한 데이터

형태)

HMACSHA256(
	base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    MY_SECRET_KEY_1234!@#
) secret base64 encoded
profile
안녕하세요! 👋 개발과 운영을 공부하고 있습니다. 코드를 작성하는 것만큼 서비스가 안정적으로 운영되는 것에도 관심이 많습니다. 프론트엔드부터 백엔드, 그리고 인프라 운영까지 전체적인 서비스 생명주기를 이해하면서 공부하고 있습니다.

0개의 댓글