Fido2 на Android, как вернуть дескриптор пользователя (идентификатор пользователя)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Гость
 Fido2 на Android, как вернуть дескриптор пользователя (идентификатор пользователя)

Сообщение Гость »


Я пытаюсь использовать Fido2 на Android. Мне удалось создать учетные данные с помощью следующего кода:

val options = PublicKeyCredentialCreationOptions .Builder() .setRp(PublicKeyCredentialRpEntity(params.rpId, params.rpName, null)) .setUser( PublicKeyCredentialUserEntity( Base64.decode(params.userId, Base64.URL_SAFE), параметры.имя_пользователя, params.userName, // TODO спросить Деклана об значке? параметры.имя_пользователя ) ) .setChallenge(Base64.decode(params.challenge, Base64.URL_SAFE)) .setParameters( Список( PublicKeyCredentialParameters( PublicKeyCredentialType.PUBLIC_KEY.toString(), params.pubKeyAlg ), ) ) .строить() val fido2ApiClient = context.reactContext?.let { Fido.getFido2ApiClient(it) } val Task = fido2ApiClient?.getRegisterPendingIntent(опции) задача?.addOnSuccessListener { пытаться { context.currentActivity!!.startIntentSenderForResult( это.intentSender, REGISTER_REQUEST_CODE, нулевой, 0, 0, 0 ) } catch (e: IntentSender.SendIntentException) { RNLog.w(context.reactContext as ReactContext ?, «ОШИБКА ROPO $e») } } задача?.addOnFailureListener { RNLog.w(context.reactContext as ReactContext?, «Не удалось запустить намерение $it») } И извлечение (подпись) осуществляется через:

val AllowKeys = ArrayList() for (i в 0 до params.allowCredentials.size) { val keyHandle: String = params.allowCredentials val keyHandleByte = Base64.decode(keyHandle, Base64.URL_SAFE) разрешенные ключи.add( PublicKeyCredentialDescriptor( PublicKeyCredentialType.PUBLIC_KEY.toString(), ключHandleByte, нулевой ) ) } val options = PublicKeyCredentialRequestOptions.Builder() .setChallenge(params.challenge.toByteArray()) .setRpId(params.rpId) .setAllowList(разрешенные ключи) .строить() val fido2ApiClient = context.reactContext?.let { Fido.getFido2ApiClient(it) } val задача = fido2ApiClient?.getSignPendingIntent(опции) задача?.addOnSuccessListener { пытаться { context.currentActivity!!.startIntentSenderForResult( это.intentSender, SIGN_REQUEST_CODE, нулевой, 0, 0, 0 ) } catch (e: IntentSender.SendIntentException) { RNLog.w(context.reactContext as ReactContext ?, «ОШИБКА ROPO $e») } } задача?.addOnFailureListener { RNLog.w(context.reactContext as ReactContext?, «Не удалось запустить намерение $it») } Это вызывает обе работы с прослушивателями активности. Вот фрагмент кода, который обрабатывает ответ на подпись/извлечение:

когда (resultCode) { Activity.RESULT_CANCELED -> { returnPromise!!.reject("authenticationCanceled", null, null) } Activity.RESULT_OK -> { if (!intent!!.hasExtra(Fido.FIDO2_KEY_CREDENTIAL_EXTRA)) { returnPromise!!.reject("authenticationError", null, null) } еще { val credential = PublicKeyCredential.deserializeFromBytes(intent.getByteArrayExtra(Fido.FIDO2_KEY_CREDENTIAL_EXTRA)!!) val ответ = credential.response если (ответ AuthenticatorErrorResponse) { returnPromise!!.reject("authenticationError", response.errorMessage, null) } еще { val userHandle = (ответ как AuthenticatorAssertionResponse).userHandle // ЭТО НУЛЬ!!! returnPromise!!.resolve(Base64.encodeToString(userHandle, Base64.URL_SAFE)) } } } } Однако проблема в том, что когда я пытаюсь получить доступ к AuthenticatorAssertionResponse.userHandle, значение там отсутствует, оно равно нулю.

Похоже, этот ответ предполагает, что на Android невозможно получить доступ к дескриптору пользователя.

Мне действительно интересно, не делаю ли я здесь что-то не так.

В качестве дополнительных данных в спецификации четко указано, что можно добавить расширение, указывающее на сохранение ключа на устройстве, которое затем должно сохранять/возвращать свойство дескриптора пользователя. Однако я не могу найти способ добавить это расширение в код Kotlin:


Изображение


Любая помощь приветствуется! Спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»