Flutter WebView는 기본적으로 안드로이드에서는 크롬 브라우저, iOS에서는 사파리를 기반으로 동작합니다. 그러나, 특정 서비스(특히 Google 계정 로그인)에서 내장 WebView를 통한 로그인을 차단하면서, 문제가 발생했습니다.
대표적인 오류:
403 disallowed_useragent
이 오류는 앱 내장 WebView를 통한 로그인 시도를 차단하는 보안 정책에 따른 것으로, 내장 WebView 사용 시 Google과의 통신이 서드파티에 의해 변경될 위험이 있기 때문에 발생합니다. Google은 2021년 9월 30일부로 내장 WebView를 통한 로그인을 허용하지 않도록 정책을 강화했습니다.
브라우저에게 너는 cup가 iphone 이고 이 브라우저는 사파리란다라고 속여버리기! 🤔
근데 이젠 브라우저 신뢰를 할 수 없다고 하다가 되다가 안되다 이상한 webview 구글에서
이건 빠스인데
하고 거절해버리는 상황…
현재 상황은 WebView의 User-Agent를 iOS Safari 브라우저와 동일하게 설정하더라도, Google의 보안 정책에 의해 신뢰할 수 없는 브라우저로 간주되거나, 간헐적으로 작동이 불안정한 상태입니다. Google은 이를 보안 위험으로 간주하여 점점 더 엄격한 정책을 적용하고 있습니다. 이로 인해 "WebView로는 불가능하다"는 메시지가 나오는 경우가 많아졌습니다.
문제 원인
User-Agent 스푸핑 한계:
// User agent string을 iOS Safari 브라우저처럼 설정 (웹사이트에서 네이티브 앱처럼 인식 가능) userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1',
- User-Agent를 수정하여 WebView가 Safari처럼 보이도록 설정했지만, Google은 단순히 User-Agent만으로 브라우저의 신뢰성을 평가하지 않습니다.
- 브라우저 환경(쿠키, 세션 유지 방식, 인증 프로토콜 등)도 검사하므로 WebView는 결국 신뢰할 수 없는 환경으로 판단됩니다.
Google의 정책 강화:
- Google은 내장 WebView를 통한 OAuth 로그인을 2021년 이후부터 차단하기 시작했습니다.
- 이는 서드파티 앱이 Google 계정과의 민감한 통신을 조작하거나 가로챌 위험이 있기 때문입니다.
간헐적 성공 이유:
- 일부 서비스는 User-Agent 기반으로만 브라우저를 식별하기 때문에 동작하는 경우도 있습니다.
- 하지만 Google의 OAuth 인증은 환경 전반을 평가하므로 안정적인 작동을 보장하지 못합니다.
Google의 정책 변경으로 인해 WebView를 통한 Google 계정 로그인은 현실적으로 불가능하다는게 결국 개발자인 나의 … 종착지였다…
- WebView 대신 외부 브라우저 또는 Custom Tabs/Safari ViewController를 사용하던가
- Google Sign-In 패키지를 활용하여 로그인을 처리하던가
- Redirect 설정으로 OAuth 인증 결과를 앱에 전달하던가…
결국, 개발 시간을 잡아 바로 시작해야 하는 상황이 되었다. 난 또다시 모든 계획을 뒤집고 처음부터 다시 작업해야 하는 상황에 직면했다.
이런 상황이 익숙하지 않은 건 아니지만, 그럼에도 매번 새로 마주할 때마다 쉽지 않다는 걸 실감한다. 하지만 개발자라면 피할 수 없는 일이기도 하다…
이번에도 문제를 해결하기 위해 고민하고, 부딪히고, 다시 도전하며 더 나은 결과물을 만들어내야 한다. 이런 과정이 결국 성장으로 이어진다는 걸 알기에, 또다시 몰입의 시간을 시작하려 한다. 한 번 더!
Share article