OIDC AC flow 가 "왜 굳이 브라우저(또는 시스템 브라우저)" 를 거치게 만드는가, 그리고 왜 Google 등이 카카오톡 인앱 WebView 같은 embedded user-agent 를 차단하는가에 대한 정리.
7.1 OAuth/OIDC 보안 모델이 브라우저 위에 서 있는 이유
redirect 기반 인증 흐름의 보안 전제 — 다음 보호가 모두 사용자 에이전트(브라우저) 안에서만 성립:
보호 무엇이 보장되나
| 클라이언트 격리 | RP(클라이언트 앱) 가 사용자 비밀번호를 절대 보지 못함. 입력은 IdP origin 위에서만 |
| Same-Origin Policy | 다른 origin 의 JS 가 IdP 의 DOM·쿠키에 접근 불가 |
| HttpOnly / Secure / SameSite cookie | IdP 세션 쿠키는 JS 도 못 읽고 cross-site 도 차단 |
| TLS / URL bar / lock 아이콘 | 사용자가 "정말 IdP 도메인" 인지 시각적으로 확인 |
| WebAuthn / Passkey / OS 통합 | 시스템 브라우저만 OS 의 보안 키·생체인증·Credential Manager 호출 가능 |
| CSP / SRI / Mixed Content | IdP 가 브라우저 보안 정책으로 자기 페이지를 능동적으로 보호 |
핵심 명제: 사용자가 RP 를 100% 신뢰하지 않더라도 IdP 만 신뢰하면 안전하게 로그인 가능 — 이 명제가 OAuth 의 본질이고, 위 보호들이 무너지면 이 전제 자체가 무너진다.
7.2 SSO 가 브라우저 위에서만 가능한 이유
IdP 도메인의 세션 쿠키 가 브라우저의 쿠키 jar 에 남아 있고, 다른 RP 가 같은 IdP 로 redirect 하면 그 쿠키가 자동 첨부 → 사용자가 다시 로그인 안 해도 됨. 이게 OIDC SSO 의 핵심 메커니즘.
- 모바일 앱이 자체 HTTP 클라이언트로 IdP 를 직접 호출하면 IdP 쿠키를 못 가짐 → SSO 불가
- 시스템 브라우저(SFSafariViewController / Chrome Custom Tabs) 는 OS 차원의 쿠키 jar 를 공유 → 앱 간 SSO 유지
- 인앱 WebView 는 호스트 앱마다 별도 쿠키 jar → SSO 도 끊김
7.3 인앱 WebView (카카오톡 / 페이스북 등) 가 차단되는 이유
호스트 앱이 WebView 의 거의 모든 영역에 접근 가능 — 위의 보안 전제가 한 번에 무너진다:
- WebView 의 JS 실행 / DOM 조작 가능 (evaluateJavascript, executeScript)
- WebView 의 쿠키 jar 를 호스트 앱이 직접 읽기·수정
- 비밀번호 입력 필드 값을 가로챌 수 있음 (keylogger 수준)
- URL bar 가 없거나 호스트 앱이 임의로 그린 가짜 — 피싱 식별 불가
- WebAuthn / 자동완성 / Passkey 가 일반적으로 비활성 (OS 가 신뢰 안 함)
- IdP 도메인 쿠키가 시스템 브라우저와 분리 → SSO 깨짐
7.4 Google 의 정책 — disallowed_useragent
Google 은 OAuth 2.0 정책으로 embedded user-agent (인앱 WebView) 호출을 명시적으로 차단. 차단 시 응답:
오류: 이 브라우저 또는 앱에서 Google 계정에 로그인할 수 없습니다.오류 코드: disallowed_useragent
User-Agent 헤더 검사로 카카오톡 / 페이스북 / 인스타그램 / 라인 등 주요 앱의 인앱 WebView 를 식별 후 거부. 사용자는 우측 상단 메뉴 → "외부 브라우저로 열기" 로 시스템 브라우저에 다시 열어야 함.
같은 정책을 Microsoft, Apple Sign in, GitHub 등 주요 IdP 가 공유.
7.5 권장 — RFC 8252 OAuth 2.0 for Native Apps
"OAuth 2.0 authorization requests from native apps should only be made through external user-agents, primarily the user's browser." — RFC 8252 §8.12
Best Current Practice:
- iOS: ASWebAuthenticationSession (권장) 또는 fallback SFSafariViewController
- Android: Chrome Custom Tabs
- 데스크톱 앱: localhost loopback redirect + 시스템 브라우저
- 인앱 WebView 사용 금지 — 보안·UX·SSO 모두 손해
이 RFC 가 현재 IdP 들의 인앱 WebView 차단 정책의 직접 근거.
7.6 한 줄 결론
OIDC 의 보안 전제(클라이언트 격리·SSO·피싱 방어)는 쿠키 + Origin 정책 + OS 보안 통합 위에서만 성립하기 때문에 브라우저가 강제되고, 같은 이유로 호스트 앱이 모든 걸 들여다볼 수 있는 인앱 WebView 는 IdP 들이 명시적으로 거부한다.
'Programming-[Base] > Web, Browser' 카테고리의 다른 글
| JWT 기반 사용자 식별 패턴 정리 (0) | 2026.05.06 |
|---|---|
| [TIL] MIME TYPE .jpg 서버에서 해석문제 (0) | 2025.01.06 |
| Web Architecture / 기초 / HTTP (0) | 2020.09.25 |
| Web Architecture / URI, URL, URN (0) | 2020.09.25 |
| Web Architecture / 개요 / Browser, Server, API, HTTP, Ajax (0) | 2020.09.22 |