반응형



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 구현 가능.
실제 기업 환경
대기업은:
- 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 |
댓글