새 기기 설정 시 앱 사용자 인증 정보 복원

사용자는 Credential Manager의 Restore Credentials 기능을 사용하여 새 기기를 설정할 때 앱 계정을 복원할 수 있습니다. 이 API는 개발자 미리보기로 제공되며 Android 9 이상 및 Google Play 서비스(GMS) 코어 버전 242200000 이상이 있는 모든 기기에서 사용할 수 있습니다. Restore Credentials 기능의 이점은 다음과 같습니다.

  • 원활한 사용자 환경: 사용자가 각 앱에 수동으로 로그인하지 않고도 앱 계정을 복원할 수 있습니다.
  • 사용자 참여도 증가: 새 기기를 설정할 때 계정을 복원할 수 있으면 사용자가 앱을 계속 사용할 가능성이 높아집니다.
  • 개발 노력 감소: 사용자 인증 정보 복원 기능은 인증 관리자와 통합되어 있으므로 이미 패스키를 지원하는 개발자는 사용자 인증 정보 복원 기능을 추가할 수 있습니다.

작동 방식

사용자 인증 정보 복원을 사용하여 관련 사용자 인증 정보를 만들고, 가져오고, 지울 수 있습니다.

  1. 복구 사용자 인증 정보 만들기: 사용자가 앱에 로그인하면 계정과 연결된 복구 사용자 인증 정보를 만듭니다. 이 사용자 인증 정보는 로컬에 저장되며 사용자가 Google 백업을 사용 설정하고 엔드 투 엔드 암호화가 지원되는 경우 클라우드에 동기화됩니다 (앱은 클라우드에 동기화하지 않도록 선택할 수 있음).
  2. 복원 사용자 인증 정보 가져오기: 사용자가 새 기기를 설정하면 앱이 인증 관리자로부터 복원 사용자 인증 정보를 요청할 수 있습니다. 이렇게 하면 추가 입력 없이 사용자를 자동으로 로그인할 수 있습니다.
  3. 복구 인증 정보 삭제: 사용자가 앱에서 로그아웃하면 연결된 복구 인증 정보를 삭제해야 합니다.

사용자 인증 정보 복원 기능은 이미 패스키를 구현한 백엔드 시스템과 원활하게 통합될 수 있습니다. 이 호환성은 패스키와 복구 키 (사용자 인증 정보 복원 기능에서 사용하는 사용자 인증 정보 유형)가 동일한 기본 기술 사양을 준수한다는 사실에서 비롯됩니다. 이 정렬을 통해 복원 사용자 인증 정보 프로세스가 패스키 지원 시스템에 저장된 사용자 인증 정보를 효과적으로 검색하고 복원하여 다양한 플랫폼과 인증 방법에서 일관되고 사용자 친화적인 환경을 제공할 수 있습니다.

인증 관리자 하단 시트
그림 1. 사용자 인증 정보 생성, 복원 흐름 시작, 자동 사용자 로그인 등 복원 사용자 인증 정보를 사용하여 새 기기에 앱 데이터를 복원하는 방법을 보여주는 다이어그램

구현

사용자 인증 정보 복원 API는 Credential Manager Jetpack 라이브러리를 통해 사용할 수 있습니다. 시작하려면 다음 단계를 따르세요.

  1. 프로젝트에 Credential Manager 종속 항목을 추가합니다.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. CreateRestoreCredentialRequest 객체를 만듭니다.

  3. CredentialManager 객체에서 createCredential() 메서드를 호출합니다.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    생성된 이 복원 사용자 인증 정보는 webauthn 사용자 인증 정보 유형이며 복원 키라고 합니다.

  4. 사용자가 새 기기를 설정할 때 CredentialManager 객체에서 getCredential() 메서드를 호출합니다.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. 사용자가 앱에서 로그아웃하면 CredentialManager 객체에서 clearCredentialState() 메서드를 호출합니다.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

백업 에이전트를 사용하는 경우 onRestore 콜백 내에서 getCredential 부분을 실행합니다. 이렇게 하면 앱 데이터가 복원된 직후 앱의 사용자 인증 정보가 복원됩니다.

자주 묻는 질문(FAQ)

Q1. 복구 키와 패스키의 차이점은 무엇인가요?

복구 키는 패스키와 유사하게 작동하지만 새 기기에서 계정 복원을 위해 특별히 설계되었습니다. Google 비밀번호 관리자와 같은 비밀번호 관리자를 사용하여 인증하면 사용 가능한 패스키와 비밀번호가 표시되지만 복구 키는 정기적인 로그인용이 아니므로 표시되지 않습니다.

Q2. 복원 키는 일회용 사용자 인증 정보인가요?

아니요, 복원 키는 일회용 사용자 인증 정보가 아닙니다. Credential Manager는 상태가 없고 사용자 활동을 알지 못하므로 사용 후 키를 자동으로 삭제할 수 없습니다.

복구 키는 다음 상황에서만 삭제됩니다.

  • 시스템 수준 작업: 사용자가 앱을 제거하거나 데이터를 지웁니다.
  • 앱 수준 호출: 앱 코드에서 사용자 로그아웃을 처리할 때 CredentialManager#clearCredentialState()를 호출하여 프로그래매틱 방식으로 키를 삭제합니다.

Q3. 사용자 인증 정보 복원 기능은 새 기기에서만 작동하나요?

예. 이 기능은 시스템의 백업 및 복원 기능과 직접 연결되어 있으므로 새로운 Android 기반 기기의 초기 설정에 적합합니다.

Q4. 사용자가 동일한 Google 계정으로 로그인한 모든 기기에 사용자 인증 정보 복원을 사용하여 자동으로 로그인할 수 있나요?

아니요. 사용자 인증 정보 복원 기능은 기기 간 일반 로그인에 사용하기 위한 것이 아닙니다. 이 기능은 사용자가 이전 기기의 백업을 복원하여 새 기기를 설정하는 경우라는 한 가지 특정 시나리오에서만 작동합니다. 이 일회성 복원 프로세스가 성공하려면 두 기기가 동일한 Google 계정에 연결되어 있어야 합니다.

Q5. 조직에 하나의 기본 앱과 여러 하위 앱이 있습니다. 하나의 키로 이러한 모든 앱을 복원할 수 있나요?

아니요. 복원 키는 애플리케이션의 고유 패키지 이름에 연결됩니다. 기본 앱과 각 하위 앱의 패키지 이름이 다르므로 앱마다 별도의 복원 키를 만들어야 합니다.

Q6. 사용자 계정의 복구 키를 만드는 데 패스키가 필요한가요?

아니요, 패스키는 필요하지 않습니다. 복구 키를 만드는 기능은 사용자의 로그인 방법과 무관합니다. 사용자의 현재 인증된 상태를 저장하는 것이 목적입니다. 사용자가 앱에 활성 상태로 로그인되어 있는 한 사용자의 복원 키를 생성할 수 있습니다.

Q7. 사용자가 복구 키를 삭제할 수 있나요?

아니요, 사용자는 복원 키를 직접 제어할 수 없습니다. 앱 로직은 복원 키 관리를 담당합니다.

보안을 위해 사용자가 로그아웃할 때마다 앱이 키를 자동으로 삭제하는 것이 좋습니다. 이렇게 하면 다음에 동일한 기기에서 앱을 열 때 사용자가 올바르게 로그아웃되고 다시 로그인하라는 메시지가 표시됩니다.

Q8. 매니페스트에서 allowBackup을 true로 설정하지 않고 사용자 인증 정보 복원을 사용할 수 있나요?

예, 사용자 인증 정보 복원 기능은 allowBackup이 true로 설정되었는지 여부와 관계없이 작동합니다.

Q9. 동일한 앱에 로그인된 계정이 여러 개인 사용자의 경우 사용자 인증 정보 복원은 어떻게 작동하나요?

자격 증명 복원 기능은 한 번에 하나의 계정에서만 작동하도록 설계되었습니다.