사용자가 패스키를 만들면 신뢰 당사자 서버는 특정 세부정보를 저장하고 사용자 인증 정보 제공업체(예: Google 비밀번호 관리자)는 다른 세부정보를 저장합니다. 다음은 구체적인 설명입니다.
- 신뢰 당사자 서버는 공개 키 사용자 인증 정보를 저장합니다.
- 사용자 인증 정보 제공업체는 사용자 이름, 표시 이름, 비공개 키, 기타 연결된 메타데이터를 저장합니다. 이 메타데이터는 사용자가 로그인 중에 필요한 패스키를 식별하고 선택하는 데 도움이 됩니다.
신뢰 당사자 서버와 사용자 인증 정보 제공업체에 저장된 데이터 간의 잠재적인 불일치는 좋지 않은 사용자 경험으로 이어질 수 있습니다. 다음과 같은 시나리오에서 문제가 발생할 수 있습니다.
- 사용자 인증 정보가 신뢰 당사자 서버에서 삭제되었지만 사용자 인증 정보 제공업체에서는 삭제되지 않아 사용자 인증 정보 제공업체에서 삭제된 사용자 인증 정보를 사용자에게 표시합니다.
- 사용자 이름 또는 표시 이름이 신뢰 당사자 서버에서 업데이트되었지만 사용자 인증 정보 제공업체에서는 업데이트되지 않아 사용자 인증 정보 제공업체에서 오래된 세부정보를 표시합니다.
인증 관리자의 Signal API 를 사용하면 신뢰 당사자가 사용자 인증 정보 제공업체와 통신하여 사용자 인증 정보를 삭제하고 사용자 이름 및 표시 이름과 같은 사용자 메타데이터를 업데이트할 수 있습니다. 다양한 시나리오에 지원되는 요청 유형은 세 가지입니다.
SignalUnknownCredentialRequest- 특정 사용자 인증 정보가 더 이상 유효하지 않으며 사용자 인증 정보 제공업체에서 숨기거나 삭제해야 함을 나타냅니다.
SignalAllAcceptedCredentialIdsRequest- 사용자 인증 정보 제공업체에 허용된 사용자 인증 정보 ID 목록을 제공합니다.
SignalCurrentUserDetailsRequest- 사용자의 메타데이터 세부정보를 업데이트합니다.
버전 호환성
Signal API는 Android 15 이상을 실행하는 기기에서 사용할 수 있으며
androidx.credentials 라이브러리의 1.6.0-beta03 버전부터 사용할 수 있습니다.
구현
Signal API를 사용하려면 다음 단계를 따르세요.
프로젝트에 인증 관리자 종속 항목을 추가합니다.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha01" }
Signal API 호출
사용자 인증 정보 프로바이더에 신호 요청을 보내려면 지원되는 신호 요청을 사용하세요. 각 신호 요청 유형에는 다음 예와 같이 JSON 요청이 필요합니다.
알 수 없는 사용자 인증 정보 (
SignalUnknownCredentialRequest)SignalUnknownCredentialRequest를 사용하여 사용자 인증 정보가 거부되고 알 수 없는 것으로 간주됨을 알립니다. 사용자 인증 정보 제공업체가 이 신호를 수신하면 사용자 인증 정보를 숨기거나 삭제합니다.사용 정보
신뢰 당사자가 패스키 어설션을 확인할 수 없는 경우 이 신호를 사용합니다. 이는 패스키가 유효하지 않으며 사용자 인증 정보 제공업체에서 숨기거나 삭제해야 함을 의미합니다.
이 요청에 필요한 JSON 매개변수는
rpId및credentialId입니다. JSON 구조에 관한 자세한 내용은 signalUnknownCredential 옵션을 참고하세요.credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )허용된 모든 사용자 인증 정보 (
SignalAllAcceptedCredentialIdsRequest)SignalAllAcceptedCredentialIdsRequest를 사용하여 허용된 모든 사용자 인증 정보 집합으로 사용자 인증 정보 제공업체에 알립니다. 사용자 인증 정보 제공업체가 신호를 수신하면 이 목록에 포함되지 않은 사용자 인증 정보를 숨기거나 삭제하고 이전에 숨겨졌지만 이제 목록에 포함된 사용자 인증 정보를 숨김 해제합니다.사용 정보
신뢰 당사자가 패스키 확인에 실패하면 이 신호를 사용합니다. 이 실패는 패스키가 유효하지 않으며 사용자 인증 정보 제공업체에서 숨기거나 삭제해야 함을 의미합니다. 알려진 사용자 인증 정보 ID 집합을 사용자 인증 정보 제공업체에 브로드캐스트해야 할 때마다 이 신호를 사용할 수도 있습니다.
이 요청에 필요한 JSON 매개변수는
rpId,userId,allAcceptedCredentialIds입니다. JSON 구조에 관한 자세한 내용은 signalAllAcceptedCredential 옵션을 참고하세요.credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )현재 사용자 세부정보 (
SignalCurrentUserDetailsRequest)SignalCurrentUserDetailsRequest를 사용하여 특정 사용자의 사용자 이름 및 표시 이름과 같은 메타데이터가 업데이트되었으며 사용자 인증 정보 제공업체에 표시되어야 함을 사용자 인증 정보 제공업체에 알립니다.사용 정보
사용자 또는 신뢰 당사자가 사용자 계정과 연결된 패스키 메타데이터를 업데이트하면 이 신호를 사용합니다.
이 요청에 필요한 JSON 매개변수는
rpId,userId,name,displayName입니다. JSON 구조에 관한 자세한 내용은 signalCurrentUserDetails 옵션을 참고하세요.credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
구현 테스트
Signal API 구현을 테스트하려면 다음 단계를 완료하세요.
MyVault라는 사용자 인증 정보 제공업체 샘플을 설치합니다.
설정 > 비밀번호, 패스키 및 계정 > 기본 서비스 에서 MyVault를 사용자 인증 정보 제공업체로 사용 설정합니다.
설정 > 앱 > MyVault > 알림 에서 MyVault의 모든 알림을 사용 설정합니다.
설정 > 앱 > MyVault > 알림 > 카테고리 > Signal API 알림 채널 에서 알림에 화면에 팝업 이 사용 설정되어 있는지 확인합니다.
앱에서 사용자 인증 정보 제공업체에 신호 요청을 보내는 흐름을 트리거합니다. 화면에 MyVault의 알림이 표시됩니다. 이렇게 하면 사용자 인증 정보 제공업체가 요청을 수신했는지 확인할 수 있습니다.