Generating client state via the Mobile SDK

This page explains how to create a client state during a Keyless Enrollment or Authentication, which can then be leveraged for binding a user on a new device.

What is the client state?

The Keyless client state contains all the necessary information to restore an account. It can be created during enrollment and authentication

circle-info

To create and use the client state Keyless requires the user's biometric to be authenticated.

The temporay state internals are not important but you can expect a string similar to the following that you should pass as-is to recover the account:

"{\"artifact\":{\"family\":\"davideface_lite\",\"version\":\"1.2.0\",\"target\":\"mobile_sdk\",\"liveness\":\"liveness\"},\"core-client-state\":\"BASE_64_STATE\"}"
circle-exclamation

Obtain the client state

Use the generatingClientState parameter of the BiomEnrollConfig or BiomAuthConfig. When doing so, we recommend choosing BACKUP as the client state type to be generated. Note: if you’re using Flutter, this parameter will instead be named shouldRetrieveTemporaryState.

Dunring the enrollment flow:

val enrollConfig = BiomEnrollConfig(generatingClientState = ClientStateType.BACKUP)

Keyless.enroll(
  configuration = enrollConfig,
  onCompletion = { result ->
    when (result) {
      is Keyless.KeylessResult.Success -> {

      	val clientState = result.value.clientState
      	// store the client state on your backend to recover the account in the future

      }
      is Keyless.KeylessResult.Failure -> Log.d("KeylessSDK ", "error code ${result.error.code}")
    }
  }
)

During the authentication flow:

val authConfig = BiomAuthConfig(generatingClientState = ClientStateType.BACKUP)

Keyless.authenticate(
  configuration = authConfig,
  onCompletion = { result ->
    when (result) {
      is Keyless.KeylessResult.Success -> {

      	val clientState = result.value.clientState
      	// store the client state on your backend to recover the account in the future

      }
      is Keyless.KeylessResult.Failure -> Log.d("KeylessSDK ", "error code ${result.error.code}")
    }
  }
)

Last updated

Was this helpful?