서비스에 패스키를 통합하는 방법을 알아봅니다.
패스키 시스템 구성
패스키 시스템은 다음과 같은 몇 가지 구성요소로 이루어져 있습니다.
- 신뢰 당사자: 패스키 컨텍스트에서 신뢰 당사자 (RP)가 패스키 발급 및 인증을 처리합니다. RP는 클라이언트(패스키를 생성하거나 패스키로 인증하는 웹사이트 또는 앱)와 클라이언트의 패스키로 생성된 사용자 인증 정보를 등록, 저장, 확인하는 서버를 운영해야 합니다. 패스키 모바일 애플리케이션은 디지털 애셋 링크와 같은 OS 제공 연결 메커니즘을 사용하여 RP 서버 도메인에 결합되어야 합니다.
- 인증자: 운영체제에서 제공하는 화면 잠금 기능을 사용하여 패스키를 만들고 확인할 수 있는 휴대전화, 태블릿, 노트북 또는 데스크톱 컴퓨터와 같은 컴퓨팅 기기입니다.
- 비밀번호 관리자: Google 비밀번호 관리자와 같이 패스키를 제공, 저장, 동기화하는 최종 사용자 기기에 설치된 소프트웨어입니다.
등록 절차
웹사이트에서 WebAuthn API를 사용하거나 Android 앱의 인증 관리자 라이브러리를 사용하여 새 패스키를 만들고 등록합니다.
새 패스키를 생성하려면 다음과 같은 몇 가지 주요 구성요소를 제공해야 합니다.
- RP ID: 신뢰 당사자 ID를 웹 도메인 형식으로 제공합니다.
- 사용자 정보: 사용자 ID, 사용자 이름, 표시 이름
- 제외할 사용자 인증 정보: 중복 등록을 방지하기 위해 이전에 저장된 패스키에 관한 정보입니다.
- 패스키 유형: 기기 자체 ('플랫폼 인증자')를 인증자로 사용할지 분리 가능한 보안 키 ('크로스 플랫폼 / 로밍 인증자')로 사용할지를 나타냅니다. 또한 호출자는 사용자가 로그인에 사용할 계정을 선택할 수 있도록 사용자 인증 정보를 검색 가능하게 할지 여부를 지정할 수 있습니다.
RP가 패스키 생성을 요청하고 사용자가 화면 잠금 해제로 패스키를 확인하면 새 패스키가 생성되고 공개 키 사용자 인증 정보가 반환됩니다. 이 정보를 서버로 전송하고 향후 인증을 위해 사용자 인증 정보 ID와 공개 키를 저장합니다.
패스키를 생성하고 등록하는 방법을 자세히 알아보세요.
인증 흐름
등록된 패스키로 인증하려면 웹사이트의 WebAuthn API 또는 Android 앱의 인증 관리자 라이브러리를 사용합니다.
패스키로 인증하려면 다음과 같은 몇 가지 주요 구성요소를 제공해야 합니다.
- RP ID: 신뢰 당사자 ID를 웹 도메인 형식으로 제공합니다.
- 챌린지: 재전송 공격을 방지하는 서버 생성 챌린지입니다.
RP가 패스키를 사용한 인증을 요청하고 사용자가 화면 잠금 해제로 이를 확인하면 공개 키 사용자 인증 정보가 반환됩니다. 이를 서버로 전송하고 저장된 공개 키로 서명을 확인합니다.
패스키로 인증하는 방법을 자세히 알아보세요.
서버 측 통합
패스키를 생성할 때 서버는 챌린지, 사용자 정보, 제외할 사용자 인증 정보 ID 등의 주요 매개변수를 제공해야 합니다. 그런 다음 클라이언트에서 전송된 공개 키 사용자 인증 정보를 확인하고 공개 키를 데이터베이스에 저장합니다. 패스키로 인증하려면 서버에서 사용자 인증 정보를 신중하게 검증하고 사용자가 로그인할 수 있도록 서명을 확인해야 합니다.
그러나 패스키 서버를 직접 빌드하는 것은 시간 효율적이지 않으며 중요한 보안 이슈로 이어질 수 있는 버그를 초래할 수 있습니다. 사용 가능한 오픈소스 라이브러리 중 하나 또는 패스키 통합 속도를 높일 수 있는 솔루션을 사용하는 것이 좋습니다.
오픈소스 라이브러리 목록을 찾으려면 passkeys.dev의 라이브러리 섹션 또는 크라우드 소싱된 WebAuthn 라이브러리 목록을 확인하세요. 솔루션을 찾을 수 있도록 FIDO Alliance에는 인증된 FIDO2 서버 목록이 있습니다.
기존 (레거시) 인증 메커니즘
기존 서비스에서 패스키를 지원하면 비밀번호와 같은 이전 인증 메커니즘에서 패스키로의 전환은 하루 내에 이루어지지 않습니다. 보안 수준이 낮은 인증 방법을 가능한 한 빨리 삭제할 의향이 있을 것입니다. 하지만 이렇게 하면 사용자에게 혼란을 일으키거나 일부 사용자가 이탈할 수 있습니다. 당분간 기존 인증 방법을 유지하는 것이 좋습니다.
여기에는 다음과 같은 몇 가지 이유가 있습니다.
- 패스키 호환되지 않는 환경에 있는 사용자가 있음: 패스키 지원이 여러 운영체제와 브라우저에서 광범위하게 확장되고 있지만 이전 버전을 사용하는 사용자는 아직 패스키를 사용할 수 없습니다.
- 패스키 생태계가 아직 성숙하지 않음: 패스키 생태계가 변화하고 있습니다. 다양한 환경 간의 UX 세부정보와 기술 호환성을 개선할 수 있습니다.
- 사용자가 아직 패스키를 사용할 준비가 되지 않았을 수 있음: 새로운 것을 시작하는 것을 주저하는 사용자가 있습니다. 패스키 생태계가 발전함에 따라 패스키의 작동 방식과 패스키가 왜 유용한지 이해할 수 있게 됩니다.
기존 인증 메커니즘 다시 확인
패스키를 사용하면 인증을 더 간단하고 안전하게 만들 수 있지만, 기존의 메커니즘을 유지하는 것은 구멍을 남기는 것과 같습니다. 기존 인증 메커니즘을 다시 확인하여 개선하는 것이 좋습니다.
비밀번호
안전한 비밀번호를 만들고 웹사이트별로 관리하는 것은 사용자에게 까다로운 작업입니다. 시스템에 내장된 비밀번호 관리자 또는 독립형 비밀번호 관리자를 사용하는 것이 좋습니다. 웹사이트와 앱에서 로그인 양식을 약간만 변경하면 보안 및 로그인 환경에 큰 변화를 가져올 수 있습니다. 변경 방법을 확인하세요.
- 로그인 양식 권장사항(웹)
- 가입 양식 권장사항 (웹)
- 인증 관리자로 사용자 로그인(Android)
이중 인증
비밀번호 관리자를 사용하면 사용자가 비밀번호를 처리하는 데 도움이 되지만 모든 사용자가 사용하는 것은 아닙니다. 이러한 사용자를 보호하기 위해 일반적으로 일회용 비밀번호(OTP)라는 추가 사용자 인증 정보를 요청합니다. OTP는 일반적으로 이메일, SMS 메시지 또는 Google OTP와 같은 인증자 앱을 통해 제공됩니다. OTP는 일반적으로 제한된 시간 범위 동안만 동적으로 생성된 짧은 텍스트이므로 계정 도용 가능성을 줄입니다. 이러한 메서드는 패스키만큼 강력하지는 않지만 사용자에게 비밀번호만 남겨두는 것보다는 훨씬 낫습니다.
OTP를 전송하기 위해 SMS를 선택했다면 다음 권장사항을 참고하여 OTP를 입력하는 사용자 환경을 간소화하세요.
- SMS OTP 양식 권장사항 (웹)
- SMS Retriever API를 사용한 자동 SMS 인증 (Android)
ID 제휴
ID 제휴는 사용자가 안전하고 쉽게 로그인할 수 있는 또 다른 옵션입니다. ID 제휴를 사용하면 사용자가 웹사이트와 앱에서 타사 ID 공급업체의 사용자 ID를 사용하여 로그인할 수 있습니다. 예를 들어 Google 계정으로 로그인은 개발자에게 훌륭한 전환을 제공하므로 사용자는 비밀번호 기반 인증보다 더 쉽고 낫다고 생각합니다. ID 제휴는 패스키를 보완합니다. 웹사이트나 앱에서 사용자의 기본 프로필 정보를 한 번에 확인할 수 있으므로 가입할 때 유용합니다. 패스키는 재인증을 간소화하는 데 유용합니다.
Chrome에서 2024년에 서드 파티 쿠키를 단계적으로 지원 중단한 후에는 구축 방식에 따라 일부 ID 제휴 시스템이 영향을 받을 수 있습니다. 영향을 완화하기 위해 Federated Credential Management API (FedCM)라는 새로운 브라우저 API가 개발되고 있습니다. ID 공급업체를 운영하는 경우 세부정보를 확인하고 FedCM을 채택해야 하는지 확인하세요.
- Federated Credential Management API (웹, FedCM)
- 웹용 Google 계정으로 로그인 개요 (웹, Google 계정으로 로그인)
- Android의 원탭 로그인 개요 (Android, 원탭 로그인)
'매직 링크'
매직 링크 로그인은 사용자가 링크를 클릭하여 직접 인증할 수 있도록 서비스에서 이메일을 통해 로그인 링크를 전달하는 인증 방법입니다. 이렇게 하면 사용자가 비밀번호를 기억하지 않고 로그인하는 데 도움이 되지만 브라우저/앱과 이메일 클라이언트 간에 전환하는 것은 문제가 됩니다. 또한 인증 메커니즘은 이메일에 의존하므로 이메일 제공업체의 취약한 보안으로 인해 사용자 계정이 위험에 노출될 수 있습니다.
학습 리소스
웹
웹사이트에 패스키를 통합하려면 Web Authentication API(WebAuthn)를 사용합니다. 자세한 내용은 다음 리소스를 확인하세요.
- 비밀번호 없는 로그인의 패스키 만들기: 사용자가 웹사이트의 패스키를 만들 수 있는 방법을 설명하는 도움말입니다.
- 양식 자동 완성을 통해 패스키로 로그인: 기존 비밀번호 사용자를 수용하면서 패스키를 사용한 비밀번호 없는 로그인을 설계하는 방법을 설명하는 문서입니다.
- 웹 앱에서 양식 자동 완성으로 패스키 구현: 웹 앱에서 양식 자동 완성으로 패스키를 구현하여 더 간단하고 안전한 로그인을 만드는 방법을 알아볼 수 있는 Codelab입니다.
- 웹 앱에서 양식 자동 완성으로 패스키를 구현하는 방법 알아보기: 웹 앱에서 양식 자동 완성으로 패스키 구현 Codelab을 통해 웹 앱에서 양식 자동 완성으로 패스키를 구현하여 더 간단하고 안전한 로그인을 만드는 워크숍 동영상입니다.
- 첫 WebAuthn 앱 빌드: 웹사이트에서 패스키를 사용하여 간단한 재인증 기능을 빌드하는 방법을 알아볼 수 있는 Codelab입니다.
Android
Android 앱에 패스키를 통합하려면 인증 관리자 라이브러리를 사용합니다. 자세한 내용은 다음 리소스를 확인하세요.
- 인증 관리자로 사용자 로그인: Android에 인증 관리자를 통합하는 방법을 설명하는 도움말입니다. 사용자 인증 정보 관리자는 단일 API에서 사용자 이름 및 비밀번호, 패스키, 제휴 로그인 솔루션 (예: Google 계정으로 로그인)과 같은 멀티 로그인 방법을 지원하는 Jetpack API입니다.
- Credential Manager API를 사용하여 패스키로 앱에 원활한 인증 제공: Android의 인증 관리자를 통해 패스키를 통합하는 방법을 설명하는 도움말입니다.
- Android 앱에서 Credential Manager API를 사용하여 인증 과정을 간소화하는 방법 알아보기: Credential Manager API를 구현하여 패스키 또는 비밀번호를 사용해 앱에서 원활하고 안전한 인증을 제공하는 방법을 알아보세요.
- 사용자 인증 정보 관리자 샘플 앱: 패스키 수용 인증 관리자를 실행하는 샘플 코드입니다.
- 인증 관리자를 사용자 인증 정보 제공업체 솔루션과 통합 | Android 개발자
UX
패스키 사용자 환경 권장사항을 알아봅니다.