OAuth2.0
OAuth2.0 은 제 3자 애플리케이션이 사용자 비밀번호 없이 리소스에 접근 할 수 있도록 권한을 위임하는 표준 프로토콜
핵심개념: 사용자가 직접 비밀번호를 제공하지 않고, AccessToken을 통해 제한된 권한만 부여합니다.
주요 구성 요소 4가지
- Resource Owner(사용자): 리소스 사용자
- Client(애플리케이션): 권한을 요청하는 서비스
- Authentication Server: 인증 및 토큰 발급 서버
- Resource Server: 실제 리소스를 제공하는 서버
Authorization Code Flow (가장 일반적):
1. 사용자가 "구글로 로그인" 클릭
2. 구글 로그인 페이지로 리다이렉트
3. 사용자가 권한 승인
4. Authorization Code 발급
5. Client가 Code로 Access Token 교환
6. Token으로 사용자 정보 요청
장점:
비밀번호 노출 없이 안전한 인증 제한된 권한만 부여 가능 토큰 만료로 보안성 강화
결론: 카카오, 구글 소셜 로그인이 대표적인 OAuth 2.0 활용 사례입니다.
- OAuth 2.0 (절차/프로토콜)
“구글 계정으로 로그인” 버튼 클릭 ↓ 구글 로그인 페이지로 이동 ↓ 아이디/비밀번호 입력 ↓ “이 앱이 프로필 정보를 볼 수 있도록 허용하시겠습니까?” 동의 ↓ 토큰 발급받음 → “어떻게 권한을 받을 것인가”의 흐름
- JWT (토큰 형식) 발급받은 토큰의 모양: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
이 토큰 안에는: { “userId”: “123”, “email”: “user@gmail.com” } 같은 정보가 담겨있음 → “발급받은 토큰을 어떻게 만들 것인가”의 형식
OAuth 2.0 답변: “OAuth 2.0은 소셜 로그인에 사용되는 인가 프로토콜입니다. 사용자가 구글이나 카카오로 로그인할 때, 우리 서비스가 사용자 비밀번호 없이도 제한된 권한으로 사용자 정보에 접근할 수 있도록 합니다. Authorization Code를 받아 Access Token으로 교환한 후, 이 토큰으로 리소스 서버에서 사용자 정보를 가져옵니다.”
JWT 답변: “JWT는 JSON 기반의 토큰 형식입니다. Header, Payload, Signature 세 부분으로 구성되며, 토큰 자체에 사용자 정보를 담을 수 있어 서버가 세션을 저장할 필요가 없습니다. 서명으로 위변조를 검증할 수 있어 Stateless한 인증 방식을 구현할 때 사용합니다.”
차이점 질문 받으면: “OAuth 2.0은 ‘어떻게 권한을 받을 것인가’의 절차이고, JWT는 ‘토큰을 어떤 형식으로 만들 것인가’입니다. OAuth로 발급받은 Access Token을 JWT 형식으로 만들 수도 있고, 단순 문자열로 만들 수도 있습니다. 즉, OAuth는 프로토콜, JWT는 토큰 포맷입니다.”