발급자로부터 사용자 인증 정보를 수신하고 저장하려면 보유자 앱이 발급 흐름을 처리해야 합니다. 발급 흐름에서 발급자 웹사이트 또는 앱은 사용자 앱에 사용자 인증 정보를 프로비저닝하는 데 필요한 정보를 자세히 설명하는 사용자 인증 정보 제안을 보냅니다. 보유자 앱은 RegistryManager를 사용하여 처리하려는 사용자 인증 정보 유형을 인증 관리자에 등록합니다. 이렇게 하면 사용자에게 앱이 표시되고 사용자가 인증서를 수신하기 위한 발급 요청 중에 앱을 선택할 수 있습니다.
사용자 인증 정보가 Holder API와 함께 작동하는 방식에 대한 자세한 내용은 Holder API 핵심 개념을 참고하세요.
Android 버전 호환성
홀더 API는 Android 6 (API 수준 23) 이상에서 지원됩니다.
구현
인증 관리자 홀더 API를 사용하려면 앱 모듈의 빌드 스크립트에 다음 종속 항목을 추가하세요.
Groovy
dependencies { // Use to implement credentials registrys implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04" }
Kotlin
dependencies { // Use to implement credentials registrys implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04") }
RegistryManager 만들기
RegistryManager 인스턴스를 만들고 RegisterCreationOptionsRequest 요청을 등록합니다.
val registryManager = RegistryManager.create(context)
try {
registryManager.registerCreationOptions(object :
RegisterCreationOptionsRequest(
creationOptions = buildIssuanceData(),
matcher = loadIssuanceMatcher(),
type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
id = "openid4vci",
) {}
)
} catch (e: Exception) {
Log.e(TAG, "Issuance registration failed.", e)
}
매처는 등록 중에 설정된 creationOptions와 발급기관이 보낸 사용자 인증 정보 제안을 수신하여 인증 관리자 UI에 표시되는 항목을 결정하는 WebAssembly (Wasm) 바이너리 파일입니다. 매처의 예는 오픈소스 예시 지갑 앱을 참고하세요.
발급 요청 처리
다음으로, 지갑은 사용자가 사용자 인증 정보 생성 옵션을 선택한 경우를 처리해야 합니다. 샘플 지갑에 설명된 대로 androidx.credentials.registry.provider.action.CREATE_CREDENTIAL 인텐트 필터를 리슨하는 활동을 정의합니다.
활동을 실행하는 인텐트에는 생성 요청과 호출 출처가 포함되어 있으며, 이는 PendingIntentHandler.retrieveProviderCreateCredentialRequest 함수로 추출할 수 있습니다. API는 생성 요청과 관련된 모든 정보가 포함된 ProviderCreateCredentialRequest를 반환합니다. 두 가지 주요 구성요소가 있습니다.
- 요청을 한 앱입니다.
getCallingAppInfo을 사용하여 이를 검색할 수 있습니다. - 호출 앱의 요청입니다.
CreateCredentialRequest을 반환하는getCallingRequest로 이를 가져올 수 있습니다. 요청이 디지털 사용자 인증 정보에 관한 것이면CreateDigitalCredentialRequest의 인스턴스이며, 여기에는requestJson속성에 발급 요청 JSON이 포함됩니다. 다음 샘플 코드로 처리할 수 있습니다.
val pendingIntentRequest =
PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
Log.i(TAG, "Got DC creation request: ${request.requestJson}")
processCreationRequest(request.requestJson)
}
생성 응답 반환
지갑에서 사용자 인증 정보를 저장하는 데 필요한 단계를 완료하면 사용자 인증 정보 응답으로 활동을 완료합니다.
val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
resultData,
CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()
예외가 있는 경우 다음과 같이 사용자 인증 정보 예외를 보낼 수 있습니다.
val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
resultData,
CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
컨텍스트에서 사용자 인증 정보 응답을 반환하는 전체 예시를 보려면 샘플 앱을 참고하세요.