이 글에서는 네이티브 앱(iOS + Android)에서 패스키를 구현하는 방법을 설명합니다. 패스키 인증에 권장되는 웹뷰 유형에 대해 알아봅니다.

Vincent
Created: June 20, 2025
Updated: December 10, 2025

Passkeys Series: Native Apps
See the original blog version in English here.
+70-page Enterprise Passkey Whitepaper:
Learn how leaders get +80% passkey adoption. Trusted by Rakuten, Klarna & Oracle
| 접근 방식 | 채택률 | 패스키 생성 | 패스키 사용 | 패스키 관리 | 기술적 복잡성 | OAuth 지원 |
|---|---|---|---|---|---|---|
| 네이티브 구현 | 🟢🟢🟢 | 높은 채택률, 최고의 UX, 매끄러운 생체 인증 | 즉각적이고 조용한 인증 | 완전한 네이티브 제어 | 중간-높음 | 별도 흐름 필요 |
| 시스템 웹뷰 | 🟢🟢 | 우수한 채택률, 브라우저와 유사한 경험 | 표준 브라우저 UX, 공유 키체인 | 브라우저 기반 관리 | 낮음 | 매우 우수 |
| 임베디드 웹뷰 | 🟢 | 낮은 채택률, 더 많은 설정 필요 | iOS 및 Android 네이티브 지원(WebKit 1.12.1+), Conditional UI 미지원 | 제한된 제어 | 중간-높음 | 해당 없음 |
참고: 시스템 웹뷰와 임베디드 웹뷰는 종종 결합되어 사용됩니다. 시스템 웹뷰가 로그인(자동 자격 증명 공유 포함)을 처리한 다음, 임베디드 웹뷰가 설정에서 패스키 관리를 렌더링하는 방식입니다.
주요 결정 요인:
최신 모바일 플랫폼은 네이티브 앱에 패스키를 통합하기 위한 세 가지 뚜렷한 접근 방식을 제공합니다. 각 방식은 사용자 경험, 기술적 복잡성, OAuth 호환성 측면에서 서로 다른 장단점을 가집니다.
네이티브 구현: 플랫폼 API(iOS AuthenticationServices, Android Credential Manager)를 사용하여 앱에 직접 패스키 흐름을 구축합니다. 매끄러운 생체 인증으로 최고의 사용자 경험을 제공하지만, 중간에서 높은 수준의 기술 구현 노력이 필요합니다.
시스템 웹뷰: 플랫폼의 브라우저 구성 요소(iOS ASWebAuthenticationSession / SFSafariViewController, Android Chrome 맞춤 탭)를 사용하여 인증을 처리합니다. OAuth 기반 로그인 흐름에 매우 적합하며 시스템 브라우저와 자격 증명을 공유합니다.
임베디드 웹뷰: 네이티브 앱 스켈레톤으로 웹 인증을 재사용하기 위해 앱 내에 사용자 정의 가능한 웹뷰(iOS WKWebView, Android WebView)를 내장합니다. URL 표시줄 없이 네이티브와 유사한 외관을 제공하며 웹뷰 UI를 완전히 제어할 수 있습니다. 패스키 기능을 활성화하려면 권한 및 자격(iOS), AndroidX WebKit 1.12.1+를 사용한 웹뷰 구성(Android) 등 추가 설정이 필요합니다.
올바른 선택은 앱의 인증 아키텍처, OAuth 제공업체 사용 여부, UI 제어 수준, 네이티브 우선으로 구축하는지 또는 웹 구성 요소를 재사용하는지에 따라 달라집니다.
네이티브 패스키 구현은 플랫폼별 API를 사용하여 앱의 UI에 직접 인증 흐름을 구축하므로 최적의 사용자 경험을 제공합니다. 사용자는 플랫폼 네이티브 대화 상자, 매끄러운 생체 인식 검증, 가장 빠른 로그인 시간의 이점을 누릴 수 있습니다.
네이티브 구현을 선택해야 할 때:
preferImmediatelyAvailableCredentials를 사용하여 패스키가 있을 때
자동으로 패스키 오버레이를 표시할
수 있어, 식별자 입력 없이 가장 빠른 로그인 경험을 제공합니다.핵심 장점: preferImmediatelyAvailableCredentials()
네이티브 구현은 preferImmediatelyAvailableCredentials()를 활용하여 앱 시작 시 패스키가
있을 때 즉시 나타나는
자동 패스키 오버레이를
만들 수 있습니다. 이 사용자 이름 없는 흐름은 가장 빠른 로그인 경험을 제공합니다. 사용자는
먼저 식별자를 입력하지 않고도 즉시 자신의 패스키를 볼 수 있습니다. 이 기능은 네이티브
구현에만 독점적으로 제공되며 웹뷰 변형에서는 사용할 수 없습니다.
웹뷰 구현은 Conditional UI(입력 필드의 패스키 제안)를 사용할 수 있지만, 네이티브의 자동 오버레이는 앱 실행 즉시 인증이 시작되므로 더 높은 패스키 사용률과 우수한 UX를 제공합니다.
기술 요구사항 개요:
네이티브 패스키 통합은 앱과 웹 도메인 간의 암호화 신뢰를 필요로 합니다. 이것이 없으면 OS는 모든 WebAuthn 작업을 거부합니다. 주요 요구사항은 다음과 같습니다.
/.well-known/에 호스팅된 앱-도메인 연결 파일가장 큰 이점은 웹사이트에서 생성된 패스키가 앱에서 원활하게 작동하고 그 반대도 가능하다는 것입니다.
iOS에서 패스키를 네이티브로 구현하려면 Apple의 AuthenticationServices 프레임워크를 사용해야 합니다. 이 프레임워크는 WebAuthn 작업을 위한 API를 제공합니다.
주요 구성 요소:
ASAuthorizationController: 인증 흐름 관리ASAuthorizationPlatformPublicKeyCredentialProvider: 패스키 요청 생성개발 팁
?mode=developer를 추가하여 강제로 새 파일을 가져옵니다.Android의 네이티브 패스키 구현은 Credential Manager API(또는 이전 버전과의 호환성을 위해 구형 FIDO2 API)를 사용합니다.
주요 구성 요소:
CredentialManager: 모든 자격 증명 작업을 위한 중앙 APICreatePublicKeyCredentialRequest: 패스키 등록용GetCredentialRequest: 패스키 인증용참고: Android는 현재 네이티브 앱에서 iOS의 Conditional UI 키보드 제안 기능이 부족합니다(웹 앱에서는 Conditional UI가 작동함).
패스키를 네이티브로 구현하는 데에는 중요한 과제와 교훈이 있습니다. OS 수준에서 통합하면 다양한 기기 및 OS 버전에서 문제가 발생할 수 있습니다.
원시 플랫폼 API를 사용하여 패스키를 구현할 수도 있지만, 전용 SDK는 WebAuthn의 복잡성, 엣지 케이스를 처리하고 내장된 원격 측정 기능을 제공하여 개발을 크게 가속화합니다. SDK는 또한 단위 테스트를 위한 모의 인터페이스를 제공합니다(시뮬레이터에서 생체 인식을 테스트할 수 없으므로 중요함).
권장 사항: 네이티브 구현의 경우, 프로덕션 배포를 통해 발견된 수많은 엣지 케이스를 처리하고 추가적인 원격 측정 및 테스트를 제공하는 Corbado SDK(iOS Swift Passkey SDK, Android Kotlin Passkey SDK) 사용을 권장합니다.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
Corbado proved to be a trusted partner. Their hands-on, 24/7 support and on-site assistance enabled a seamless integration into VicRoads' complex systems, offering passkeys to 5 million users.
수백만 명이 빠르게 채택하는 Passkeys. Corbado의 Adoption Platform으로 시작하세요.
무료 평가판 시작하기시스템 웹뷰는 플랫폼의 네이티브 브라우저 구성 요소를 사용하여 앱 내에서 인증을 처리합니다. 완전한 네이티브 구현과 달리 시스템 웹뷰는 실제 시스템 브라우저(iOS의 Safari, Android의 Chrome)를 사용하여 웹 콘텐츠를 표시하므로 공유 쿠키, 저장된 자격 증명 및 친숙한 브라우저 보안 표시기를 유지합니다.
시스템 웹뷰를 선택해야 할 때:
주요 장점:
플랫폼 구성 요소:
ASWebAuthenticationSession(인증 흐름에 권장) 또는
SFSafariViewController(일반 브라우징)Google 및 GitHub과 같은 주요 기업들은 기존 웹 인증 페이지에 웹뷰 오버레이를 통해 모바일 앱에 패스키 로그인을 추가하기 위해 이 접근 방식을 채택했습니다. 이는 완전한 네이티브 인증 재구축이 즉시 실현 가능하지 않을 때 잘 작동합니다.
iOS는 인증을 위해 두 가지 주요 시스템 웹뷰 구성 요소를 제공합니다.
ASWebAuthenticationSession (인증에 권장):
SFSafariViewController (일반 브라우징):
| 기능 | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| 주요 사용 사례 | 인증 흐름 | 일반 웹 브라우징 |
| OAuth/OIDC | 매우 우수 | 좋음 |
| 패스키 지원 | 예 | 예 |
| 사용자 정의 | 제한적 | 최소 |
앱이 OAuth 기반 로그인을 사용하는 경우, ASWebAuthenticationSession은 인증 시나리오를
위해 특별히 설계되었으며 보안과 사용자 경험의 최상의 균형을 제공하므로 권장되는
선택입니다.
Chrome 맞춤 탭(CCT)은 앱 내에서 Chrome 기반 인증 경험을 제공합니다.
주요 기능:
OAuth 통합: Chrome 맞춤 탭은 iOS의 ASWebAuthenticationSession에 해당하는 Android 기능으로, 저장된 패스키에 대한 액세스를 유지하면서 뛰어난 OAuth 지원을 제공합니다.
임베디드 웹뷰는 앱 내에서 웹 콘텐츠 렌더링을 완벽하게 제어할 수 있게 해주어 URL 표시줄 없이 쿠키, 세션, 탐색을 직접 조작할 수 있습니다. 그러나 이러한 제어에는 패스키 기능을 활성화하기 위한 추가적인 기술 요구사항이 따릅니다.
임베디드 웹뷰를 선택해야 할 때:
중요한 맥락:
많은 앱이 하이브리드 접근 방식을 사용합니다. 시스템 웹뷰가 초기 OAuth 인증(패스키가 원활하게 작동하는 곳)을 처리한 다음, 인증 후에는 임베디드 웹뷰로 전환하여 설정에서 패스키를 관리합니다. 문제는 임베디드 웹뷰 내에서 직접 패스키를 사용하려고 할 때 발생합니다.
기술 요구사항:
임베디드 웹뷰는 시스템 웹뷰에 비해 추가 설정이 필요합니다.
플랫폼 구성 요소:
WKWebViewandroid.webkit.WebView장단점:
웹뷰를 통해 패스키를 구현할 때, 시스템 웹뷰와 임베디드 웹뷰의 차이점을 이해하는 것이 중요합니다. 위에서 설명한 세 가지 접근 방식(네이티브 구현, 시스템 웹뷰, 임베디드 웹뷰)은 각각 다른 사용 사례에 적합합니다.
iOS에서는 앱 내에서 웹 콘텐츠를 표시하기 위한 여러 옵션이 있습니다.
Android의 주요 선택지는 다음과 같습니다.
android.webkit.WebView)으로, 본질적으로
액티비티에 내장할 수 있는 미니 브라우저입니다. 사용자 정의가 매우 용이하지만 앱의
프로세스 내에서 실행됩니다.다음 섹션에서는 iOS 및 Android용 웹뷰 유형에 대해 더 자세히 알아보고, 패스키 인증 흐름에 어떤 것이 가장 적합할지 논의하겠습니다.
Apple의 플랫폼은 위에 나열된 세 가지 웹뷰 옵션을 제공합니다. 어떤 것을 선택하느냐에 따라 앱 내에서 패스키를 얼마나 원활하게 사용할 수 있는지가 달라집니다.
iOS에서 다양한 웹뷰 동작을 테스트하려면 WebView - WKWebView and UIWebView rendering 앱을 권장합니다.
WKWebView는 iOS용 다목적 웹뷰 구성 요소입니다. 개발자는 WKWebView를 내장하여 UI 및 동작에 대한 높은 수준의 제어권을 가지고 웹 콘텐츠를 렌더링할 수 있습니다. WKWebView는 Safari와 동일한 렌더링 엔진을 사용하므로 성능이 매우 뛰어나고 최신 웹 기능을 지원합니다. 이론적으로 WKWebView는 올바르게 구성되면 WebAuthn(따라서 패스키)을 처리할 수 있지만, 보안상의 이유로 일부 고급 브라우저 기능이 제한될 수 있다는 점에 유의해야 합니다. 주의할 점 중 하나는 WKWebView가 기본적으로 모바일 Safari와 쿠키나 키체인 데이터를 공유하지 않는다는 것입니다. 사용자의 웹뷰 세션이 Safari의 세션과 격리되어 있기 때문에 다시 로그인해야 할 수도 있습니다. 또한 WKWebView 콘텐츠는 앱에서 완전히 사용자 정의할 수 있기 때문에 사용자는 주소 표시줄이나 Safari UI를 볼 수 없습니다. 이는 브랜딩에는 좋지만, 사용자가 페이지의 합법성을 확인할 단서가 적다는 것을 의미합니다(피싱 방지에 대한 우려). 일부 앱은 스크립트를 주입하거나 콘텐츠를 변경하기 위해 WKWebView를 남용하기도 했습니다(예: TikTok은 인앱 브라우저를 통해 추적 JS를 주입하는 것으로 알려짐). 따라서 WKWebView를 안전하고 사용자가 신뢰할 수 있는 방식으로 사용하도록 주의해야 합니다.
SFSafariViewController는 인앱 Safari 경험을 제공합니다. SFSafariViewController로 URL을 열면 사용자가 앱의 UI 내에 머무른다는 점을 제외하고는 실제 Safari 브라우저에서 여는 것과 거의 같습니다. 패스키에 대한 이점은 상당합니다. 본질적으로 Safari이기 때문에 사용자의 iCloud 키체인과 저장된 패스키에 접근할 수 있습니다. iOS 11 이상에서는 쿠키가 공유되지 않는다는 점에 유의하세요. 즉, 사용자가 이미 사이트에 대한 패스키를 가지고 있다면 Safari가 이를 찾아 Conditional UI 자동 완성을 표시하여 쉽게 로그인할 수 있습니다. SFSafariViewController는 사용자 정의가 덜 가능하지만(툴바를 많이 변경할 수 없음), 많은 보안 및 개인 정보 보호 기능을 자동으로 처리합니다. HTTPS용 자물쇠 아이콘과 함께 URL 표시줄이 표시되어 사용자가 올바른 도메인에 있다는 확신을 줍니다. 일반적으로 SFSafariViewController는 원시 WKWebView보다 더 안전한 것으로 간주되며 구현하기가 더 간단합니다(Apple이 드롭인으로 제공). 주요 단점은 모양과 느낌에 대한 제어권을 일부 희생한다는 것입니다. 인증 흐름의 경우 이는 보통 허용됩니다. 여기서 우선순위는 보안과 로그인 용이성이며, SFSafariViewController는 Safari의 컨텍스트를 사용하여 이 점에서 탁월합니다.
| WKWebView | SFSafariViewController | |
|---|---|---|
| 사용자 경험 | - 네이티브 느낌: 개발자가 앱 디자인과 일치하도록 모양과 느낌을 사용자 정의할 수 있기 때문에 사용자는 웹 콘텐츠가 앱의 네이티브 일부라고 느낄 수 있습니다. - 자동 완성: Safari의 데이터로 자동 완성이 가능합니다. | - 매끄러운 경험: 사용자의 Safari 설정을 사용하여 네이티브 앱과 브라우저 간에 일관된 웹 브라우징을 보장하는 매끄러운 사용자 경험. |
| 개발자 경험 | - 높은 사용자 정의 가능성: 광범위한 사용자 정의 및 구성 가능 - 유연성: 웹 콘텐츠와 상호 작용하기 위한 많은 API | - 중간 수준의 사용자 정의 가능성: 특히 WKWebView에 비해 제한된 사용자 정의 옵션 - 단순함: WKWebView에 비해 구현이 더 간단함 |
| 성능 | - 다소 느림: 구현 및 웹 콘텐츠에 따라 로딩 속도를 최적화할 수 있지만, 사용자 정의 기능 및 상호 작용의 추가 처리로 인해 SFSafariViewController에 비해 여전히 느릴 수 있습니다. | - 다소 빠름: 속도와 효율성에 최적화된 Safari 엔진을 활용하므로 일반적으로 더 나은 성능을 제공하여 웹 페이지의 빠른 로딩 시간을 제공합니다. |
| 신뢰와 인지도 | - URL 표시 불필요: WKWebView는 종종 URL을 표시하지 않아 사용자가 웹페이지를 확인하기 어렵게 만듭니다. 악의적인 앱이 이 동작을 모방하여 자격 증명을 피싱할 가능성이 있습니다. | - 브라우저와 유사한 경험: Safari를 사용하여 웹 페이지를 렌더링하여 "브라우저와 유사한" 경험을 제공합니다. 사용자는 URL을 보고 Safari의 자동 완성 기능에 접근할 수 있어 친숙한 인터페이스로 인해 더 많은 신뢰를 심어줄 수 있습니다. |
| 격리 | - 분리됨: 쿠키와 세션이 Safari와 분리되어 있습니다. 사용자는 WKWebView에 자동으로 로그인되지 않습니다. | - 분리됨: 쿠키와 세션이 Safari와 분리되어 있습니다. 사용자는 SFSafariViewController에도 자동으로 로그인되지 않습니다. |
| 취약점 | - 안전함: Apple의 앱 샌드박싱으로 인해 본질적으로 안전하지만, 동작과 보안은 앱의 구현에 따라 달라집니다. 올바르게 구현되지 않으면 잠재적인 취약점이 있을 수 있습니다. | - 더 안전함: 피싱 방지 및 악성 웹사이트 경고를 포함한 Safari의 내장 보안 기능의 이점을 누립니다. 이러한 기능과 Safari에 대한 사용자 친숙성으로 인해 일반적으로 WKWebView보다 웹 콘텐츠를 표시하는 데 더 안전한 것으로 간주됩니다. |
| 기타 | - 사용할 수 없는 기능: 보안 문제와 애플리케이션 컨텍스트에서 실행되는 WKWebView로 인해 일부 브라우저 기능(예: WebAuthn)에 완전히 접근하지 못할 수 있습니다. - JavaScript 주입: TikTok과 같은 일부 앱은 인앱 WKWebView에 추적 JavaScript를 주입하거나 사용자 제어를 제한합니다(예: Facebook). - 개인 정보 보호 문제: 개인 정보 보호에 대한 더 많은 커뮤니티 피드백이 있습니다. | - JavaScript 주입 없음: 앱에서 JavaScript 실행을 허용하지 않아 보안 및 개인 정보 보호를 강화합니다. 또한 JavaScript 경고나 확인을 지원하지 않아 특정 웹 페이지에서 사용자 경험에 영향을 줄 수 있습니다. - 읽기 모드: 기사를 깨끗하고 읽기 쉽게 볼 수 있는 읽기 모드를 제공합니다. |
SFAuthenticationSession / ASWebAuthenticationSession – 이 클래스들(후자는 더 새로운 Swift 친화적인 이름)은 OAuth나 OpenID Connect와 같은 로그인 흐름을 위해 특별히 만들어졌습니다. 웹 페이지를 통해 사용자 인증이 필요할 때(아마도 외부 IdP에), 이 세션들은 iOS에서 권장되는 선택입니다. 이들은 내부적으로 Safari 브라우저를 활용하고 Safari와 쿠키/저장소를 공유한다는 점에서 SFSafariViewController와 매우 유사합니다. 주요 차이점은 SFAuthenticationSession이 항상 사용자에게 앱이 웹 페이지를 사용하여 인증하기를 원한다는 것을 알려주고(사용자 인식을 위해), 가능한 경우 사용자의 기존 Safari 세션을 자동으로 사용한다는 것입니다.
이점은 매끄러운 SSO 경험입니다. 사용자가 이미 Safari에서 제공자에 로그인되어 있다면, 이 세션은 해당 쿠키를 사용하여 다른 로그인을 피할 수 있습니다. 패스키의 경우, 이는 Safari/iCloud 키체인에 저장된 모든 패스키 자격 증명을 여기서도 사용할 수 있음을 의미하기 때문에 중요합니다. Apple의 공식 지침은 로그인 흐름처럼 보이는 모든 것에 ASWebAuthenticationSession을 사용하는 것입니다. 장점은 향상된 개인 정보 보호(앱은 자격 증명이나 쿠키를 절대 보지 않고 Safari가 처리함)와 내장된 SSO 지원입니다. 단점은 인증 흐름에만 국한된다는 것입니다(앱에서 임의의 웹 콘텐츠를 렌더링하는 데는 사용하지 않음). 요약하자면, iOS에서 웹뷰 접근 방식을 선택하는 경우, ASWebAuthenticationSession은 안전하고 Safari와 상태를 공유하며 인증을 위해 특별히 제작되었기 때문에 패스키를 구현하는 데 일반적으로 최상의 선택입니다.
Android에서 웹뷰 결정은 클래식 웹뷰와 Chrome 맞춤 탭 사이에서 이루어집니다.
Android에서 다양한 웹뷰 동작을 테스트하려면 WebView vs Chrome Custom Tabs 앱을 권장합니다.
Android WebView(android.webkit.WebView)는 액티비티 레이아웃에 웹 페이지를 내장할 수 있는 구성 요소입니다. 탐색을 가로채고, JavaScript를 주입하고, UI를 사용자 정의하는 등 모든 제어권을 제공한다는 점에서 WKWebView와 유사합니다. 또한 앱의 프로세스 내에서 실행됩니다. 패스키에 웹뷰를 사용한다는 것은 앱이 웹 로그인 페이지를 로드하고, 해당 페이지가 WebAuthn 패스키 절차를 시작할 수 있음을 의미합니다. 최신 Android 웹뷰는 WebAuthn을 지원합니다(기기의 웹뷰 구현이 Android 시스템 웹뷰나 Chrome 구성 요소를 통해 최신 상태인 경우). 한 가지 주요 고려 사항: 기본적으로 Android 웹뷰는 사용자의 Chrome 브라우저와 쿠키나 저장된 자격 증명을 공유하지 않습니다. 따라서 웹뷰에서 생성되거나 사용된 패스키는 Chrome에 알려지지 않을 수 있으며, 그 반대도 마찬가지입니다. 이 격리는 보안에 좋을 수 있지만(앱이 브라우저 쿠키를 읽을 수 없음), 사용자가 이미 Chrome에서 인증한 경우 다시 로그인하도록 강요할 수 있습니다. 또 다른 문제는 신뢰입니다. 일반 웹뷰는 URL이나 SSL 잠금 아이콘을 표시하지 않으므로 사용자는 앱이 자신을 피싱하지 않을 것이라고 완전히 신뢰해야 합니다. Google은 잠재적인 피싱 위험 때문에 Google OAuth 로그인을 위한 웹뷰 사용을 금지하기도 했습니다. 성능 면에서 웹뷰는 괜찮지만, 특히 무거운 페이지를 로드할 경우 사용자의 기본 브라우저를 사용하는 것보다 느리거나 메모리를 더 많이 사용할 수 있습니다.
**Chrome 맞춤 탭(CCT)**은 하이브리드 접근 방식입니다. 앱이 마치 앱의 일부인 것처럼 보이는 Chrome 렌더링 페이지를 열 수 있게 합니다. 툴바 색상을 사용자 정의하고, 앱 로고를 추가하는 등의 작업을 할 수 있지만, 콘텐츠는 별도의 프로세스에서 Chrome에 의해 렌더링됩니다. 패스키의 경우, CCT에는 몇 가지 이점이 있습니다. 사용자의 쿠키와 자격 증명을 Chrome과 공유하므로 사용자가 Chrome을 통해 (Google 비밀번호 관리자) 패스키를 저장한 경우 맞춤 탭이 이에 접근할 수 있습니다. 사용자는 또한 실제 URL과 보안 표시기를 볼 수 있어 신뢰를 구축합니다. 성능은 종종 더 좋습니다. Chrome은 더 빠른 로딩을 위해 백그라운드에서 "준비"될 수 있습니다. 그리고 중요하게도 보안이 강력합니다. 본질적으로 Chrome 앱이기 때문에 Google 세이프 브라우징과 같은 기능이 세션을 보호하고, 앱은 페이지에 임의의 스크립트를 주입할 수 없어 특정 공격을 방지합니다.
단점은 사용자가 Chrome(또는 지원되는 브라우저)을 설치하고 최신 상태로 유지해야 한다는 것입니다. 대부분의 Android 사용자는 그렇지만, 특정 지역의 일부 기기에서는 이것이 문제가 될 수 있습니다. 전반적으로, Android에서 내장된 웹 접근 방식을 선택한다면, Chrome 맞춤 탭은 통합과 보안의 좋은 균형을 제공하므로 패스키 흐름에 권장됩니다. 사실, 이는 여러 면에서 iOS의 SFSafariViewController/ASWebAuthSession과 유사합니다. 인증을 위해 기본 브라우저를 활용하는 것입니다.
(여담: Apple의 WKWebView 대 SFSafariViewController와 Android의 웹뷰 대 CCT는 많은 유사점을 가집니다. Safari VC와 Chrome 탭 모두 브라우저 상태를 공유하고 더 나은 보안을 제공하는 반면, WKWebView/Android 웹뷰는 더 많은 제어권을 제공하지만 웹 콘텐츠를 격리합니다. 패스키의 경우, 패스키에 원활하게 접근하고 생성할 수 있도록 상태(쿠키, 자격 증명 저장소)를 공유하는 것이 일반적으로 바람직합니다.)
| 기능 | 웹뷰 | Chrome 맞춤 탭 | |
|---|---|---|---|
| 사용자 경험 | - 유연성: JavaScript 대화 상자 및 권한 요청 처리를 포함하여 웹 콘텐츠와 상호 작용하고 사용자 상호 작용을 관리하기 위한 풍부한 API 세트를 제공합니다. - 일관성: 특히 다양한 웹 콘텐츠로 일관된 UX를 관리하는 것은 어려울 수 있습니다. | - 브라우저 기능: 데이터 절약 및 동기화된 자동 완성 같은 기능을 기기 간에 공유합니다. - 뒤로 가기 버튼: 사용자가 통합된 뒤로 가기 버튼으로 앱으로 쉽게 돌아갈 수 있습니다. - 의존성: Chrome 앱에 의존하므로 모든 사용자 기기에서 사용 가능하거나 업데이트되지 않을 수 있습니다. - 브라우저로 리디렉션: 특정 기능은 사용자를 Chrome 앱으로 리디렉션하여 사용자 경험을 방해할 수 있습니다. - 부분 맞춤 탭: 화면의 일부만 Chrome 맞춤 탭에 사용되고 나머지는 네이티브 앱을 표시할 수 있습니다. - 사이드 시트: 가로 모드 및 대형 화면 기기에서는 Chrome 맞춤 탭이 화면의 한쪽에만 표시되고 나머지 화면에는 네이티브 앱이 표시됩니다. | |
| 개발자 경험 | - 높은 사용자 정의 가능성: 광범위한 사용자 정의 옵션/요구를 제공합니다. - 상호 작용성: 웹 콘텐츠와 상호 작용하고 사용자 상호 작용을 관리하기 위한 수많은 API를 제공합니다. | - 사용자 정의 가능: 툴바 색상, 작업 버튼, 하단 툴바, 사용자 정의 메뉴 항목 및 인/아웃 애니메이션을 사용자 정의할 수 있습니다. - 콜백: 외부 탐색 시 애플리케이션에 콜백을 전달합니다. - 보안 기능: 즉시 사용 가능한 기능을 제공하여 요청, 권한 부여 또는 쿠키 저장소를 관리할 필요가 없습니다. | |
| 성능 | - 보통 성능: Chrome 맞춤 탭(CCT)과 동일한 수준의 성능을 제공하지 않을 수 있습니다. | - 사전 워밍업: 페이지 로드 시간을 향상시키기 위해 백그라운드에서 브라우저를 사전 워밍업하고 URL을 예측적으로 로드하는 기능이 포함됩니다. - 우선순위: 맞춤 탭을 실행하는 앱의 중요도를 "포그라운드" 수준으로 높여 사용 중에 앱이 종료되는 것을 방지합니다. | |
| 신뢰와 인지도 | - URL 및 SSL 보이지 않음: URL 및 SSL 정보는 웹뷰에 내재적으로 표시되지 않습니다. 앱 개발자가 이러한 기능을 구현하지 않는 한, 사용자는 올바른 웹사이트에 있는지 또는 피싱 사이트에 있는지 알 수 없습니다. | - URL 및 SSL 보임: 실제 Chrome 브라우저를 사용하여 페이지를 렌더링합니다. 사용자는 URL과 SSL 인증서(연결이 안전한지 여부를 나타냄)를 볼 수 있습니다. 이는 사용자가 피싱 사이트에 있지 않다는 확신을 줄 수 있습니다. | |
| 격리 | - 앱 프로세스 내에서 실행: 앱에 악성 코드 실행을 허용하는 취약점이 있는 경우, 웹뷰가 손상될 위험이 있습니다. 그러나 웹뷰도 업데이트를 받지만, 그 동작과 보안은 이를 사용하는 앱에 더 의존적일 수 있습니다. - 쿠키/세션 공유 없음: 기기의 주 브라우저와 쿠키나 세션을 공유하지 않아 격리를 제공하지만 사용자가 다시 로그인해야 할 수 있습니다. | - Chrome 프로세스 내에서 실행: Chrome의 일부이므로 맞춤 탭은 동일한 프로세스에서 실행되며 Chrome과 동일한 보안 업데이트 및 기능을 가집니다. - 공유 쿠키 저장소 및 권한 모델: 사용자가 사이트에 다시 로그인하거나 권한을 다시 부여할 필요가 없도록 보장합니다. - Chrome 설정 및 환경설정: Chrome의 설정 및 환경설정을 활용합니다. | |
| 취약점 | - 자격 증명 탈취를 위한 콜백: 잠재적인 취약점에는 때때로 JavaScript가 필요하여 다른 앱이 악성 코드를 실행할 수 있는 문을 열어주는 것이 포함됩니다. 예를 들어, 사용자 이름과 비밀번호를 가로채려는 콜백을 등록하는 것과 같습니다. - 피싱: 또한 악의적인 앱은 피싱 시도에서 링크 흐름을 모방하는 다른 웹 페이지를 열 수 있습니다. | - Google 세이프 브라우징: 사용자와 기기 모두를 유해한 사이트로부터 보호하기 위해 Google의 세이프 브라우징을 사용합니다. - 안전한 브라우저 장식: 사용자가 항상 상호 작용하는 정확한 URL을 보고 웹사이트의 인증서 정보를 볼 수 있도록 보장하여 피싱 위험을 줄입니다. 또한 맞춤 탭은 JavaScript 주입을 허용하지 않습니다. | |
| 기타 | - Google은 사용자를 Google 계정에 로그인시키기 위해 웹뷰를 금지했습니다. |
어떤 구현 방식을 선택하든 패스키 기능을 활성화하려면 특정 기술 요구사항을 충족해야 합니다. 이 섹션에서는 well-known 연결 파일, iOS 자격, Android 웹뷰 구성에 대한 포괄적인 지침을 제공합니다.
관리형 기기 참고: 패스키 동작은 모바일 기기 관리(MDM) 정책이 자격 증명 저장을 제어하는 관리형 기기에서 크게 변경됩니다. 관리형 기기에서 패스키를 테스트하려면 관리형 iOS 및 Android 기기에서의 패스키를 참조하세요.
네이티브 및 임베디드 웹뷰 흐름은 앱과 웹 도메인 간의 암호화 신뢰를 설정하기 위해 연결 파일이 필요합니다. 시스템 웹뷰(ASWebAuthenticationSession) 및 Chrome 맞춤 탭은 앱과 사이트 간 연결이 필요하지 않습니다.
AASA 파일은 iOS 앱과 웹 도메인 간의 연결을 설정하여 패스키가 두 플랫폼에서 모두 작동하도록 합니다.
파일 위치: https://yourdomain.com/.well-known/apple-app-site-association
구성 요구사항:
/.well-known/apple-app-site-association에 호스팅application/json.well-known 경로에 리디렉션 없음AASA 파일 예시:
{ "webcredentials": { "apps": ["TEAMID123.com.example.app"] } }
AASA 캐싱 및 테스트:
Apple은 CDN을 사용하여 AASA 파일을 공격적으로 캐시(최대 24-48시간)하므로 개발 및 테스트를 어렵게 만듭니다. 개발 중 캐싱을 우회하려면:
?mode=developer 추가⚠️ 중요: 프로덕션 릴리스에서는 ?mode=developer를 사용하지 마세요. 이 매개변수는 개발
전용입니다. 프로덕션에서 사용하면 iOS가 AASA 파일을 제대로 감지하지 못하여 패스키 기능이
손상됩니다.
유효성 검사: Apple의 AASA 유효성 검사기를 사용하여 구성을 확인하세요.
Android는 디지털 자산 링크를 사용하여 앱과 웹사이트 간의 관계를 확인합니다.
파일 위치: https://yourdomain.com/.well-known/assetlinks.json
구성 요구사항:
/.well-known/assetlinks.json에 호스팅application/jsonassetlinks.json 파일 예시:
[ { "relation": [ "delegate_permission/common.handle_all_urls", "delegate_permission/common.get_login_creds" ], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" ] } } ]
유효성 검사: Google의 디지털 자산 링크 생성기를 사용하여 구성을 생성하고 확인하세요.
iOS 앱은 패스키 기능에 접근하기 위해 적절한 자격이 필요합니다. 요구사항은 구현 방식에 따라 약간 다릅니다.
자격 파일(종종 Flutter 앱에서는 Runner.entitlements,
네이티브 iOS 프로젝트에서는 YourApp.entitlements라고 함)은 Apple 시스템에서 부여하는
특별한 권한과 기능을 정의합니다. 패스키의 경우 이 파일은 연결된 도메인을 구성합니다.
파일 위치: 일반적으로 Xcode 프로젝트의 ios/Runner/Runner.entitlements에 있습니다.
네이티브 구현 및 임베디드 웹뷰는 앱을 웹 도메인과 연결하기 위해 연결된 도메인 기능이 필요합니다. 시스템 웹뷰(ASWebAuthenticationSession)는 Safari 컨텍스트에서 실행되므로 이것이 필요하지 않습니다.
Xcode에서 설정:
webcredentials: 접두사를 사용하여 도메인 추가구성 예시:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:yourdomain.com</string> <string>webcredentials:subdomain.yourdomain.com</string> </array> </dict> </plist>
| 접근 방식 | 연결된 도메인 필요 | 추가 구성 |
|---|---|---|
| 네이티브 구현 | 예 | 전용 구현 |
| 시스템 웹뷰 | 필요 없음 | 기본 웹 설정 작동 |
| 임베디드 웹뷰 | 예 | AndroidX WebKit 1.12.1+ 구성 필요 |
여러 도메인: 앱이 여러 도메인에서 작동해야 하는 경우 관련 출처 요청(ROR)이 필요할 수 있습니다.
Android 임베디드 웹뷰는 AndroidX WebKit 1.12와 함께 네이티브 WebAuthn 지원을 받게 되어 사용자 정의 JavaScript 브리지 코드의 필요성을 없앴습니다. 시스템 웹뷰(Chrome 맞춤 탭)는 구성이 필요 없으며 자격 증명이 자동으로 작동합니다.
요구사항:
구현:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // 웹 인증이 지원되는지 확인 if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // 웹 인증 활성화 WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // JavaScript 활성화 webView.settings.javaScriptEnabled = true }
핵심 사항:
WebViewFeature.WEB_AUTHENTICATION을 확인해야 합니다.mediation:"conditional"(입력 필드의 패스키 자동 완성)은
임베디드 웹뷰에서 작동하지 않습니다.버전 참고:
AndroidX WebKit 1.12.0 이전에는 임베디드 웹뷰에 네이티브 WebAuthn 지원이 없었습니다. 팀은 다음 중 하나를 해야 했습니다.
오래된 Android 버전이나 업데이트된 WebView APK가 없는 기기를 지원해야 하는 경우, 브리지 코드 접근 방식에 대한 Android의 Credential Manager WebView 통합 가이드를 참조하세요. 그러나 최신 앱에는 네이티브 WebKit 1.12.1+ 접근 방식을 사용하는 것을 강력히 권장합니다.
권장 사항: AndroidX WebKit 1.12.1+와 함께 네이티브 WebAuthn 지원을 사용하세요. 런타임에 사용할 수 없는 경우, 공유 자격 증명과 함께 뛰어난 패스키 지원을 제공하는 Chrome 맞춤 탭으로 대체하세요.
네이티브 앱에서 패스키를 구현할 때 앱과 웹 도메인 간의 신뢰를 설정해야 합니다. 이 섹션에서는 단일 도메인, 여러 관련 도메인(ROR)을 처리하는 방법과 well-known 연결 파일이 올바르게 구성되었는지 확인하는 방법을 다룹니다.
단일 도메인(예: kayak.com)을 사용하는 앱의 경우 다음이 필요합니다.
webcredentials:kayak.com으로 구성된 연결된 도메인 자격관련 출처(ROR)는 단일 패스키
세트가 여러 관련 도메인(예: kayak.com, kayak.de, kayak.co.uk)에서 작동하도록 하는
WebAuthn 기능입니다. ROR은 각
사이트의 /.well-known/webauthn 엔드포인트를 사용하여
관련 출처를 정의하며, AASA나
assetlinks 파일은 사용하지 않습니다.
핵심 사항:
/.well-known/webauthn을 호스팅합니다.구성 예시:
앱이 kayak.com과 kayak.de에서 작동하는 경우 두 도메인 모두 다음을 충족해야 합니다.
라이브로 전환하기 전에 well-known 파일이 올바르게 구성되고 접근 가능한지 확인하세요. Apple과 Google은 파일 가용성을 확인하기 위해 CDN 기반 테스트 URL을 제공합니다.
| 도메인 | Apple AASA 확인 | Google 디지털 자산 링크 확인 |
|---|---|---|
| kayak.com | AASA 파일 테스트 Apple CDN이 파일을 검색할 수 있는지 확인 | assetlinks.json 테스트 Google이 자산 링크에 접근할 수 있는지 확인 |
| kayak.de | AASA 파일 테스트 Apple CDN이 파일을 검색할 수 있는지 확인 | assetlinks.json 테스트 Google이 자산 링크에 접근할 수 있는지 확인 |
이 테스트 URL 사용법:
?nocache=1 매개변수는 CDN 캐시를 우회하여 강제로 새로 검색합니다.kayak.com 또는 kayak.de를 자신의 도메인으로 교체합니다.테스트 시 주의사항: 모든 도메인에 well-known 파일이 올바르게 구성되었는지 확인하세요. 특정 도메인에 파일이 없거나 잘못 구성된 경우 해당 도메인의 패스키 기능이 손상될 수 있습니다.
추가 정보: 네이티브 앱에서의 WebAuthn Relying Party ID
올바른 구현 방식을 선택하는 것은 앱의 인증 아키텍처, OAuth 요구사항, 세션 제어 필요성에 따라 달라집니다. 이 의사 결정 트리를 사용하여 최상의 경로를 결정하세요.
다음 주요 질문으로 시작하세요.
앱이 OAuth 기반 로그인(OAuth2, OIDC, 소셜 로그인 제공업체)을 사용하나요?
ASWebAuthenticationSession 사용네이티브와 유사한 셸(URL 표시줄 없음, 전체 UI 제어)에서 웹 인증을 재사용하고 싶으신가요?
WKWebView + 연결된 도메인 자격WebView + AndroidX WebKit 1.12.1+ 구성새로운 네이티브 앱을 구축 중이거나 네이티브 로그인 화면이 있나요?
재사용하고 싶은 기존 웹 인증이 있나요?
각 접근 방식이 주요 차원에서 어떻게 수행되는지는 다음과 같습니다.
| 접근 방식 | 패스키 생성 | 패스키 사용 | 패스키 관리 | 기술적 복잡성 | OAuth 지원 | 설정 시간 |
|---|---|---|---|---|---|---|
| 네이티브 구현 | 높은 채택률 매끄러운 생체 인증, 최고의 UX | 즉각적, 조용함preferImmediatelyAvailableCredentials는 앱 시작 시 자동 오버레이 활성화 | 완전한 네이티브 제어 앱 설정과 통합 | 중간-높음 플랫폼별 API | 별도의 OAuth 흐름 구현 필요 | 몇 주에서 몇 달 |
| 시스템 웹뷰 | 좋은 채택률 브라우저와 유사한 경험, 친숙함 | 표준 브라우저 UX 입력 필드의 Conditional UI, 공유 키체인 | 브라우저 기반 사용자는 브라우저를 통해 관리 | 낮음 최소한의 네이티브 코드 | 매우 우수 OAuth를 위해 특별히 제작됨 | 며칠에서 몇 주 |
| 임베디드 웹뷰 | 낮은 채택률 구성 필요 | 네이티브 WebAuthn 지원 WebKit 1.12.1+, Conditional UI 없음 | 제한된 제어 네이티브 통합 없음 | 중간-높음 웹뷰 구성 + 권한 | 구성 필요 | 1-2주 |
차원 설명:
권장: 시스템 웹뷰
앱이 OAuth2, OIDC 또는 소셜 로그인 제공업체(Google, GitHub, Microsoft 등)를 통해 인증하는 경우, 시스템 웹뷰가 최적의 선택입니다.
ASWebAuthenticationSession은 OAuth 흐름을 위해 특별히 제작되었습니다.예시: kayak.com 및 kayak.de와 같은 여행 앱은 인증에 OAuth를 사용합니다. 시스템 웹뷰를 사용하면 기존 OAuth 인프라를 유지하면서 웹 인증 페이지를 통해 패스키 지원을 추가할 수 있습니다.
권장: 하이브리드 접근 방식
초기 OAuth 인증에는 시스템 웹뷰를 사용하고, 인증 후 세션에는 임베디드 웹뷰를 사용합니다.
사용 시기: OAuth를 통해 인증하지만 직접적인 세션 조작이 필요한 인증된 웹 콘텐츠를 표시해야 하는 앱.
권장: 네이티브 구현
처음부터 구축하거나 네이티브 화면이 있나요? 완전히 네이티브로 가세요.
preferImmediatelyAvailableCredentials를 사용하여
앱 시작 시 자동 패스키 오버레이 표시 -
네이티브 구현에만 해당되며 가장 높은
전환율 제공새로운 앱의 경우: 처음부터 네이티브 로그인을 구축하는 것을 강력히 권장합니다. 최적의 UX를 위한 기반을 마련하고 향후 웹뷰에서 네이티브로의 마이그레이션을 피할 수 있습니다.
권장: 단계적 마이그레이션
이 단계적 접근 방식은 기존 사용자를 방해하지 않으면서 점진적인 개선을 가능하게 합니다.
| 요구사항 | 네이티브 | 시스템 웹뷰 | 임베디드 웹뷰 |
|---|---|---|---|
| Well-known 파일 (AASA/assetlinks) | 필요 | 필요 없음 | 필요 |
| iOS 연결된 도메인 | 필요 | 필요 없음 | 필요 |
| Android WebKit 라이브러리 | 해당 없음 | 필요 없음 | 필요 (1.12.1+) |
| Relying Party ID | 도메인과 일치해야 함 | 도메인과 일치해야 함 | 도메인과 일치해야 함 |
자세한 구성 지침은 섹션 5를 참조하세요.
네이티브 앱에서 패스키를 테스트하려면 구조화된 다계층 접근 방식이 필요합니다. 테스트 피라미드를 따르세요: 단위 테스트(격리된 로직), 통합 테스트(시뮬레이터/에뮬레이터에서의 WebAuthn 절차), 시스템 테스트(실제 기기에서의 엔드투엔드 테스트).
필수 테스트 카테고리:
자동화 전략, 플랫폼별 주의사항 및 전체 사전 점검 목록을 포함한 포괄적인 테스트 지침은 전용 가이드 네이티브 iOS 및 Android 앱에서 패스키 흐름 테스트하기를 참조하세요.
사용자가 기존 방식(비밀번호, OAuth)으로 성공적으로 로그인한 후에 패스키를 생성하도록 유도하는 것을 고려해 보세요. 이 점진적인 전환 접근 방식은:
예시: 시스템 웹뷰를 통해 OAuth 로그인 후 네이티브 프롬프트를 표시합니다: "Face ID로 더 빠른 로그인을 활성화하시겠습니까?" 수락하면 시스템 웹뷰에 로드된 웹 페이지를 통해 패스키를 생성합니다.
네이티브 구현, 시스템 웹뷰 또는 임베디드 웹뷰를 통해 패스키를 구현하는 방법을 결정하는 것은 보안, 사용자 경험 및 개발 복잡성에 영향을 미치는 중요한 설계 선택입니다. 모든 경우에 적용되는 정답은 없습니다.
OAuth 기반 앱의 경우: 시스템 웹뷰(ASWebAuthenticationSession, Chrome 맞춤 탭)가 권장되는 시작점입니다. 뛰어난 OAuth 지원, 최소한의 구현 노력 및 자동 자격 증명 공유를 제공합니다.
네이티브 우선 앱의 경우: 가능한 한 빨리 네이티브로 전환하세요. 네이티브 패스키
로그인은 preferImmediatelyAvailableCredentials와 같은 독점적인 기능으로 가장 원활한 UX를
제공하며, 이는 웹뷰 구현에서는 제공할 수 없는
앱 시작 시 자동 패스키 오버레이를
가능하게 합니다. iOS와 Android가 이제 패스키에 대한 일류 지원을 제공함에 따라 실제 성공
사례는 높은 채택률을 보여줍니다. 도구(오픈 소스 SDK 및 플랫폼 라이브러리 포함)는 합리적인
시간 내에 네이티브 통합을 달성할 수 있도록 성숙해졌습니다. 기기 관리 정책, 교차 기기
동기화 및 서드파티 제공업체에 유의해야 하지만, 이러한 과제는 신중한 엔지니어링과 테스트를
통해 관리할 수 있습니다. 그 결과는 사용자의 편의성과 속도로 사용자를 기쁘게 하면서 보안을
크게 향상시키는 앱 로그인입니다.
임베디드 웹뷰 프레임 요구사항의 경우: 임베디드 웹뷰는 두 가지 실제 시나리오에서 일반적으로 사용됩니다. 첫째, OAuth 기반 앱은 종종 초기 로그인 흐름에 시스템 웹뷰를 사용한 다음, 세션 제어가 필요한 설정 화면에서 패스키 관리 옵션을 렌더링하기 위해 임베디드 웹뷰로 전환합니다. 일부 앱은 두 흐름 모두에 시스템 웹뷰를 유지하여 이를 단순화하기도 합니다. 둘째, 패스키를 채택하기 전에 이미 웹뷰 프레임에 인증 흐름을 내장한 앱은 일관성을 위해 이 패턴을 계속 사용합니다. 네이티브 WebAuthn 지원(AndroidX WebKit 1.12.1+)이 포함된 임베디드 웹뷰는 구성 및 설정(권한, 자격, 웹뷰 설정)이 필요하지만 더 이상 사용자 정의 JavaScript 브리지 코드가 필요하지 않습니다. Conditional UI는 임베디드 웹뷰에서 지원되지 않는다는 점에 유의하세요. 기존의 내장 인증 패턴을 유지해야 하거나 인증 후 화면에 대한 세션/쿠키 제어가 필요할 때 이 접근 방식을 선택하세요.
궁극적으로 네이티브 앱의 패스키는 사용자 편의성과 보안 모두에서 큰 도약을 의미합니다. 네이티브, 시스템 웹뷰 또는 임베디드 웹뷰를 통해 구현되든, 피싱 위험과 사용자의 비밀번호 관리 부담을 없애줍니다. VicRoads의 네이티브 앱 패스키 통합과 같은 실제 구현 사례는 네이티브 우선 접근 방식이 자동 패스키 오버레이와 같은 기능으로 올바르게 실행될 때 가장 높은 사용자 채택률과 만족도를 제공한다는 것을 보여줍니다. 사용자 친화적인 인증을 위한 모범 사례를 따르고 앱 아키텍처에 맞는 구현 접근 방식(새로운 앱의 경우 네이티브 우선, OAuth 흐름의 경우 시스템 웹뷰, 기존 내장 패턴의 경우 임베디드 웹뷰)을 선택하면, 패스키의 비전인 모두를 위한 간단하고 안전하며 즐거운 인증을 실현하는 비밀번호 없는 생체 인증 로그인을 제공할 수 있습니다.
네이티브 앱에서 패스키가 작동하지 않는 경우, 구현 방식별로 다음 일반적인 문제를 확인하세요.
application/json.well-known 경로에 리디렉션 없음https://your-domain.com (app:// 아님)webcredentials:yourdomain.com으로 연결된 도메인 기능 활성화ASWebAuthenticationSession(권장) 또는 SFSafariViewController 사용?mode=developer로 테스트 (프로덕션용으로는 제거)WebViewFeature.WEB_AUTHENTICATION에 대한 런타임 기능 확인setWebAuthenticationSupport()가 WEB_AUTHENTICATION_SUPPORT_FOR_APP으로
호출됨"NotAllowedError: The request is not allowed by the user agent or the platform in the current context"
setWebAuthenticationSupport() 호출패스키 프롬프트가 나타나지 않음
?mode=developer 사용, 웹뷰
유형 확인자세한 디버깅은 네이티브 앱의 Relying Party ID에 대한 기사를 참조하세요.
Corbado 네이티브 SDK:
플랫폼 문서:
유효성 검사 도구:
Passkeys Series: Native Apps
Related Articles
Passkey Tutorial: How to Implement Passkeys in Web Apps
Vincent - December 7, 2023
The High-Level Architecture of an Integrated Passkey Flow
Janina - December 21, 2022
Table of Contents