본문 바로가기
system_fundamentals/security_cryptography

OAuth2는 왜 이렇게 복잡한가

by 죄니안죄니 2026. 5. 18.
반응형
 
OAuth2는 왜 이렇게 복잡한가
OAuth2는 왜 이렇게 복잡한가OAuth2는 왜 이렇게 복잡한가
 
 

OAuth2(OAuth 2.0)가 복잡한 이유는 한 줄로 말하면:

"인터넷에서 비밀번호를 직접 주지 않으면서도,
안전하게 권한을 위임하려고 했기 때문"
 

이다.

즉:

보안 문제를 하나씩 해결하다 보니
계속 절차가 추가됨
 

이라고 보면 된다.


먼저 가장 단순한 방식 생각해보자

예전 방식:

"Google 비밀번호를 우리 서비스에 입력하세요"
 

이 방식 문제

엄청 위험하다.

왜냐면:

우리 서비스가
사용자 Google 비밀번호를 직접 알게 됨
 

만약 서비스 해킹되면?

  • Gmail 털림
  • Drive 털림
  • Google 계정 전체 위험

가능.


그래서 OAuth 등장

핵심 목표:

비밀번호는 Google만 알고,
우리 서비스는 권한만 받자
 

그런데 여기서 보안 문제가 폭발함


문제 1 — 가짜 로그인 페이지

공격자가:

가짜 Google 로그인 화면
 

띄우면?

해결

로그인은 반드시 Google 도메인에서만
 

하게 만듦.

즉 Redirect 구조 등장.


문제 2 — 토큰 탈취

Access Token은 사실상:

임시 비밀번호
 

수준.

탈취되면 끝.

해결

HTTPS 필수.


문제 3 — 중간자 공격

Authorization Code 가로채기 가능.

해결

  • state
  • PKCE

추가.


문제 4 — 클라이언트 위조

공격자가:

"나 정상 앱이에요"
 

라고 속일 수 있음.

해결

client_id
client_secret
 

구조 추가.


문제 5 — 권한 남용

앱이:

메일 삭제
드라이브 전체 접근
 

하면 위험.

해결

scope
 

개념 등장.

즉:

허용 권한 최소화
 

문제 6 — Access Token 만료

토큰을 너무 길게 유지하면 위험.

해결

  • 짧은 Access Token
  • Refresh Token

구조 등장.


문제 7 — 브라우저/앱/서버 환경 다름

OAuth는:

  • 모바일
  • SPA
  • 서버앱

전부 지원해야 했다.

그래서 흐름도 많아짐

예:

Flow 용도
Authorization Code 서버
PKCE 모바일/SPA
Client Credentials 서버 간 통신

즉 OAuth2가 복잡한 이유

사실상:

"인터넷 전체 인증 문제를 일반화"
 

하려 했기 때문.


실제로 OAuth2 스펙은

엄청 추상적이다.

RFC 문서도:

  • 흐름 많음
  • 옵션 많음
  • 구현 자유도 큼

그래서 OAuth2 자체는 로그인 프로토콜도 아님

중요 포인트.

OAuth2 원래 목적은:

인가(Authorization)
 

다.

즉:

"권한 위임"
 

이지 로그인 자체가 아니었다.


로그인까지 하려다 보니

OpenID Connect(OIDC) 추가됨.


즉 현재 실제 구조는

OAuth2
+
OIDC
+
JWT
+
TLS
+
PKCE
 

조합이다.

당연히 복잡해질 수밖에 없음.


그런데 왜 다들 쓰냐?

복잡해도 얻는 게 엄청 크기 때문.


장점

1. 비밀번호 직접 안 다룸

서비스 입장에서 보안 부담 감소.

2. 권한 범위 제한 가능

예:

이메일만 조회
 

 

3. 계정 연동 쉬움

  • Google 로그인
  • GitHub 로그인
  • Kakao 로그인

4. 중앙 인증 가능

SSO 구현 가능.


실제 기업 환경

대기업은:

  • Google
  • Microsoft
  • Okta

같은 중앙 인증 시스템 사용.


쉽게 비유하면

OAuth2는:

호텔 카드키 시스템
 

같다.


옛날 방식

마스터키(비밀번호)를 직접 줌
 

OAuth2

특정 방만 들어갈 수 있는
일회용 카드키 발급
 

그래서 복잡해진 이유

"권한 제한"
+
"유효기간"
+
"위조 방지"
+
"탈취 방지"
+
"다양한 앱 환경 지원"
 

전부 해결하려다 보니.


실무 체감

실제로 OAuth2 구현하다 보면:

"로그인 하나 하려는데 왜 이렇게 많아?"
 

느낌 많이 받는다.

특히:

  • redirect_uri
  • state
  • PKCE
  • refresh token

헷갈림.


하지만 결국 본질은 단순

비밀번호는 인증 서버만 알고,
우리 서비스는 제한된 권한 토큰만 받는다
 

가 핵심이다.


핵심 한 줄

OAuth2가 복잡한 이유는:

인터넷 환경에서 비밀번호를 직접 공유하지 않으면서도,
토큰 탈취·위조·중간자 공격·권한 남용까지 막아야 하기 때문
 

이다.

반응형

'system_fundamentals > security_cryptography' 카테고리의 다른 글

FIDO/WebAuthn  (0) 2026.05.18
Refresh Token 구조  (0) 2026.05.18
구글 로그인 기반 회원가입 시 DB구조  (0) 2026.05.18
OAuth2 흐름  (0) 2026.05.18
JWT는 암호화가 아니다  (0) 2026.05.18

댓글