본문 바로가기
관리자

Programming-[Base]/Web, Browser

AC + PKCE 가 브라우저를 강제하는 이유와 인앱 WebView 차단

728x90
반응형

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 들이 명시적으로 거부한다.

728x90
반응형