비밀번호로 인증

인증 관리자는 비밀번호 기반 로그인을 지원하지만 패스키Google 계정으로 로그인과 같은 최신 보안 인증 방법을 우선적으로 사용하는 것이 좋습니다. 이러한 방법은 보안 및 사용자 환경을 크게 개선합니다. 하지만 애플리케이션에서 비밀번호를 지원해야 하는 경우 이 가이드를 참고하여 인증 관리자로 비밀번호를 구현하세요.

인증 관리자는 앱에서 사용자 이름과 비밀번호를 비롯한 사용자 인증 정보를 저장하고 가져올 수 있는 통합 API를 제공합니다. 이렇게 하면 사용자의 로그인 프로세스가 간소화되고 사용자 인증 정보 제공자를 원활하게 활용할 수 있습니다.

기본 요건

인증 관리자의 비밀번호 구현은 Android 4.4 (API 수준 19) 이상을 실행하는 기기에서 작동합니다.

개요

이 가이드는 비밀번호를 만들고 저장하고 로그인하는 데 필요한 앱의 변경사항에 중점을 둡니다.

  • 앱에 종속 항목 추가: 필요한 인증 관리자 라이브러리를 추가합니다.
  • 인증 관리자 인스턴스화: 인증 관리자 인스턴스를 만듭니다.
  • 사용자 비밀번호 저장: 사용자 인증 정보를 안전하게 저장합니다.
  • 비밀번호로 로그인: 저장된 사용자 인증 정보를 가져와 로그인에 사용합니다.
  • 자동 완성을 사용해야 하는 필드 식별: 더 나은 사용자 환경을 위해 자동 완성을 사용합니다.
  • 디지털 애셋 링크 지원 추가: 연결된 앱과 웹사이트 간에 비밀번호를 공유하는 지원을 추가합니다.

앱에 종속 항목 추가

앱 모듈의 build.gradle 파일에 다음 종속 항목을 추가합니다.

Kotlin

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
}

Groovy

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
}

인증 관리자 인스턴스화

앱 또는 활동 컨텍스트를 사용하여 CredentialManager 객체를 만듭니다.

// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)

사용자 비밀번호 저장

사용자가 앱 내에서 가입하거나 비밀번호를 업데이트하면 비밀번호 관리자에 이러한 사용자 인증 정보를 저장합니다.

  1. 비밀번호 요청 구성: CreatePasswordRequest 객체에는 저장할 사용자 이름과 비밀번호가 포함되어 있습니다. credentialManager.createCredential()을 호출하여 저장 프로세스를 시작합니다.

  2. 응답 처리: CreatePasswordResponse를 처리하고 오류를 관리합니다 (예: 사용자가 요청을 취소하는 경우).

suspend fun registerPassword(username: String, password: String) {
    // Initialize a CreatePasswordRequest object.
    val createPasswordRequest =
        CreatePasswordRequest(id = username, password = password)

    // Create credential and handle result.
    coroutineScope {
        try {
            val result =
                credentialManager.createCredential(
                    // Use an activity based context to avoid undefined
                    // system UI launching behavior.
                    activityContext,
                    createPasswordRequest
                )
            // Handle register password result
        } catch (e: CreateCredentialException) {
            handleFailure(e)
        }
    }
}

비밀번호로 로그인

저장된 사용자 인증 정보를 가져오려면 GetPasswordOption으로 GetCredentialRequest를 빌드하고 getCredential()을 호출합니다. 지정된 사용자 ID를 기반으로 가져올 비밀번호를 필터링하려면 선택적 필드 allowedUserIds를 사용합니다.

val getPasswordOption = GetPasswordOption()

val credentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(getPasswordOption)
    .build()

자동 완성을 사용해야 하는 필드 식별

android:isCredential 속성은 사용자 인증 정보 제공자가 자동 완성을 위한 필드를 식별하는 데 도움이 되므로 사용자 환경이 더 원활해집니다. 이 속성은 기존 autofillHints를 보완합니다.

특정 필드를 자동 완성용으로 지정하는 이점은 다음과 같습니다.

  • 자동 완성 정확도 개선: 비밀번호 관리자와 Android 시스템이 사용자 인증 정보를 위한 필드를 더 잘 식별할 수 있도록 지원합니다.
  • 사용자 환경 개선: 더 원활하고 안정적인 자동 완성 추천으로 이어질 수 있습니다.

다음 예와 같이 사용자 이름 및 비밀번호 필드에 isCredential 속성을 포함합니다.

<EditText
    android:id="@+id/username_edittext"
    android:autofillHints="username"
    android:isCredential="true" />

<EditText
    android:id="@+id/password_edittext"
    android:inputType="textPassword"
    android:autofillHints="password"
    android:isCredential="true" />

또는 다음 스니펫과 같이 프로그래매틱 방식으로 속성을 추가합니다.

if (android.os.Build.VERSION.SDK_INT >=
    android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
    usernameEditText.isCredential = true
    passwordEditText.isCredential = true
}

비밀번호 관리자와의 호환성을 보장하려면 앱과 웹사이트 간에 Digital Asset Links를 구성해야 합니다. 이렇게 하면 두 플랫폼에서 사용자 인증 정보를 안전하게 공유할 수 있습니다.