encryption - iOS Swift - Virgil Security 用户已注册 - 未找到私钥
问题描述
语境
在对“Alice”进行身份验证并获取 JWT 令牌之后使用 Virgil Security SDK for iOS swift 时,在注册时总是会出现错误提示用户已经注册。即使在清除设备或使用新设备后,这也会在首次登录时发生。此外,在尝试eThree.authEncrypt()
文本方法时,错误总是指出在设备上找不到私钥,即使eThree.hasPrivateKey()
返回 true。
代码尝试
do {
let params = try EThreeParams(identity: "Alice", tokenCallback: self.virgil.authWithVirgil)
let ethree = try EThree(params: params)
ethree.register { error in
guard error == nil else {
// Error handling here
print(error?.localizedDescription) //User is already registered
return
}
print("New Registration")
// User private key loaded, ready to end-to-end encrypt!
}
} catch {
print(error.localizedDescription)
}
问题
- 为什么在清除设备或使用新设备后,代码会告诉我用户已经注册?
- 为什么
hasPrivateKey
返回 true 但是在使用时authEncrypt
出现错误,说设备中没有私钥?
解决方案
第一季度
为什么在清除设备或使用新设备后,代码会告诉我用户已经注册?
简短回答:已清除的设备或新设备中没有本地私钥。
来自官方文档。
EThree.register() 函数检查用户是否已经拥有保存在本地存储中的私钥,以及在 Virgil Cloud 上发布的公钥。如果用户没有它们,该函数会为用户生成一个新的密钥对,将私钥保存在本地......
第二季度
为什么
hasPrivateKey
返回 true 但是在使用时authEncrypt
出现错误,说设备中没有私钥?
LocalKeyStorage.retrieveKeyPair()
可用于定义私钥存在。
最佳实践
为了支持跨多设备登录,可以使用密钥备份机制。
推荐阅读
- ocaml - 如何每次折叠折叠列表的 x 个元素
- javascript - 很难在 mongodb 中创建一个好的模式
- flutter - Flutter canvas.drawline 边框半径
- javascript - JSON 对象有效且已填充,但没有方法且无法访问其数据(反应)
- python - 如何在 Python 中使用 importlib 从父目录导入?
- c# - EF6 - 使用复制的数据库
- android - 如何在安卓中使用绝对路径删除文件
- python - 从熊猫中的字符串中提取带小数的数字
- talend - 如何从 Talend 中的 Excel 文件中读取不同行的数据值?
- google-apps-script - Apps 脚本将数据从 Google 电子表格复制到特定工作表和单元格中的 Excel 文件