[Security] 소셜 로그인과 OAuth2.0, JWT 정리-2025-04-11

정지은·2025년 4월 11일
0

나머지공부

목록 보기
14/17

🌐 소셜 로그인과 OAuth2.0, JWT 정리

비밀번호를 알려주지 않아도 로그인할 수 있는 이유?
그 중심에는 OAuth2.0JWT가 있음.
이번 포스팅에서는 소셜 로그인에서 많이 사용되는 인증 방식인 OAuth2.0, Access Token, JWT에 대해 정리함.


✅ 1. OAuth란?

OAuth(Open Authorization) 는 말 그대로 “허가를 위임한다”는 뜻입니다.

예시로 이해하기

  • 기존 방식: 쇼핑몰이나 커뮤니티에 가입하려면 이메일, 비밀번호를 직접 입력 → 개인정보가 여러 곳에 퍼짐 😢
  • OAuth 방식: “카카오로 로그인”, “구글로 로그인” 클릭 → 해당 서비스(카카오)가 대신 인증해줌 → 내 비밀번호는 노출되지 않음 🔐

즉, “카카오, 이 사용자 인증해줘!” 라고 우리 서비스가 카카오에게 인증을 위임하는 구조입니다.


🔄 2. OAuth 1.0 → OAuth 2.0

OAuth는 1.0 → 2.0으로 발전하며 사용성과 보안성이 개선되었습니다.

항목설명
🔐 HTTPS 기반인증 요청은 암호화된 HTTPS 통신으로 진행
🔗 인증 서버 분리인증 서버와 리소스(데이터) 서버를 분리하여 구조 분담
🎯 확장성다양한 서비스(구글, 카카오 등)에서 유연하게 사용 가능

⚡ 3. OAuth2 인증 흐름

[1] 사용자가 "카카오로 로그인" 클릭
     ↓
[2] 브라우저가 카카오 인증 서버로 이동
     ↓
[3] 카카오 로그인 화면에서 ID/비번 입력 & 동의
     ↓
[4] 카카오가 Access Token 발급해서 우리 서비스에 전달
     ↓
[5] 우리 서비스가 Access Token으로 사용자 정보 요청
     ↓
[6] 카카오가 사용자 정보 + (JWT) 응답
     ↓
[7] 우리 서비스는 로그인 처리 + JWT 토큰을 클라이언트에 저장

🟡 카카오 로그인 요약

  • ID/비밀번호를 직접 입력할 필요 없음
  • 카카오가 인증을 대신 해주고, 토큰만 받으면 됨
  • OAuth2.0 흐름에 따라 “인증을 위임”한 것

✅ 개념 정리

1. OAuth 2.0 – 인증을 위임하는 프로토콜

  • 개념: 다른 서비스(카카오, 구글 등)를 통해 인증을 위임하는 방식
  • 목적: 비밀번호를 노출하지 않고도 다른 서비스에 로그인 가능
  • 예시: “카카오로 로그인” 클릭 → 카카오가 인증해줌

2. Access Token – 인증 결과로 받는 열쇠

  • 개념: 인증이 완료되었음을 나타내는 임시 키
  • 사용법: 이 토큰을 헤더에 넣어 API 요청 시, 서버가 인증된 유저로 판단
  • 특징: 유효기간이 있으며, 만료되면 재발급 필요

3. JWT (JSON Web Token) – 사용자 정보를 담은 스마트 토큰

  • 개념: 사용자 정보가 토큰 자체에 암호화되어 담긴 구조 (Header.Payload.Signature)
  • 장점: 서버가 매번 DB를 조회하지 않아도 유저 정보를 확인 가능
  • 형식: base64로 인코딩된 JSON 문자열
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJ1c2VyX2lkIjoxMjMsIm5hbWUiOiJKdW5na3kifQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

📌 JWT 구조 요약

Header.Payload.Signature
 └────┘ └─────┘ └──────┘
 alg+typ  사용자정보  서명(위조방지)
파트설명예시 내용
Header토큰의 타입과 알고리즘{ "alg": "HS256", "typ": "JWT" }
Payload사용자 정보 (Claims){ "user_id": 123, "name": "Jungky" }
Signature위조 방지용 서명암호화된 문자열

🎯 개념 요약표

개념역할예시
OAuth 2.0인증을 "위임"하는 표준카카오로 로그인
Access Token인증 결과로 받는 "열쇠"API 요청 시 헤더에 포함
JWT사용자 정보가 담긴 "스마트 토큰"Authorization: Bearer <토큰>

💡 흐름도 요약

[사용자]       ⇄    [카카오 인증 서버]
    ↓             (로그인 위임 요청)
[우리 서버]    ←     Access Token 발급
    ↓
[우리 서버]    →    사용자 정보 요청
    ↓
[우리 서버]    ←    사용자 정보 + (JWT 응답)
    ↓
[우리 서비스]  →     로그인 처리 완료

🔗 참고 링크

0개의 댓글