Как безопасно хранить значения в связке ключей iOS в многоплатформенном приложении Kotlin (KMP)? toNSData() не распознанIOS

Программируем под IOS
Ответить
Anonymous
 Как безопасно хранить значения в связке ключей iOS в многоплатформенном приложении Kotlin (KMP)? toNSData() не распознан

Сообщение Anonymous »

Я создаю многоплатформенное приложение Kotlin (KMP) и хочу безопасно хранить конфиденциальные значения, такие как токены аутентификации, на iOS с помощью Keychain (вместо NSUserDefaults). Я нашел этот код на Medium, но он не компилируется, поскольку toNSData() не распознается:

Код: Выделить всё

// iosMain
import platform.Security.*
import kotlinx.cinterop.*

class SecureStorageIOS : SecureStorage {
override fun save(key: String, value: String) {
val data = value.encodeToByteArray().toNSData()
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecValueData to data
)
SecItemAdd(query, null)
}

override fun get(key: String): String? {
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecReturnData to kCFBooleanTrue!!,
kSecMatchLimit to kSecMatchLimitOne
)
memScoped {
val result = nativeHeap.alloc()
val status = SecItemCopyMatching(query, result.ptr)
if (status == errSecSuccess) {
val nsData = result.value as NSData
return nsData.toByteArray().decodeToString()
}
}
return null
}
}
Проблема в том, что toNSData() не существует в Kotlin/Native. Я также получаю ошибки типа при использовании SecItemAdd, поскольку он ожидает CFDictionaryRef, а не карту Kotlin.
Мои вопросы:
  • Как правильно преобразовать ByteArray в NSData в
    Kotlin/Native?
  • Есть ли более простой или рекомендуемый способ использования Keychain в KMP для
    безопасности хранилище?


Подробнее здесь: https://stackoverflow.com/questions/798 ... rm-kmp-app
Ответить

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

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

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

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

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