Wie speichere ich Werte sicher im iOS-Schlüsselbund in einer Kotlin Multiplatform (KMP)-App? toNSData() nicht erkanntAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie speichere ich Werte sicher im iOS-Schlüsselbund in einer Kotlin Multiplatform (KMP)-App? toNSData() nicht erkannt

Post by Anonymous »

Ich erstelle eine Kotlin Multiplatform-App (KMP) und möchte sensible Werte wie Authentifizierungstoken sicher auf iOS speichern, indem ich den Schlüsselbund (anstelle von NSUserDefaults) verwende. Ich habe diesen Code auf Medium gefunden, aber er lässt sich nicht kompilieren, weil toNSData() nicht erkannt wird:

Code: Select all

// 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
}
}
Das Problem ist, dass toNSData() in Kotlin/Native nicht existiert. Ich bekomme auch Typfehler mit SecItemAdd, weil es ein CFDictionaryRef und keine Kotlin-Map erwartet.
Meine Fragen:
  • Was ist der richtige Weg, ByteArray in NSData in
    Kotlin/Native zu konvertieren?
  • Gibt es eine einfachere oder empfohlene Möglichkeit, den Schlüsselbund in KMP für
    Sicherheit zu verwenden? Lagerung?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post