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

사용자는 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 부분을 실행합니다. 이렇게 하면 앱 데이터가 복원된 직후 앱의 사용자 인증 정보가 복원됩니다.