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

인증 관리자의 사용자 인증 정보 복원 기능을 사용하면 사용자가 새 기기를 설정할 때 앱 계정을 복원할 수 있습니다. 이 API는 개발자 프리뷰 버전이며 Android 9 이상 및 Google Play 서비스(GMS) 코어 버전 242200000 이상이 설치된 모든 기기에서 사용할 수 있습니다. 인증 정보 복원 기능의 이점은 다음과 같습니다.

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

작동 방식

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

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

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

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

구현

Restore Credentials API는 Credential Manager Jetpack 라이브러리를 통해 사용할 수 있습니다. 시작하려면 다음 단계를 따르세요.

  1. 프로젝트에 인증 관리자 종속 항목을 추가합니다.

    // 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 = ...
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(Immutablelist.of(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 부분을 실행합니다. 이렇게 하면 앱 데이터가 복원된 직후에 앱의 사용자 인증 정보가 복원됩니다.