Encryption iOS Swift-维吉尔安全用户已注册-未找到私钥

Encryption iOS Swift-维吉尔安全用户已注册-未找到私钥,encryption,private-key,Encryption,Private Key,上下文 在验证“Alice”并获取JWT令牌后使用Virgil Security SDK for iOS swift时,注册时的错误始终表示用户已注册。即使在清除设备或使用新设备后首次登录时也会发生这种情况。此外,当尝试文本的etree.authEncrypt()方法时,错误总是表示在设备上找不到私钥,即使etree.hasPrivateKey()返回true 代码已尝试 do { let params = try EThreeParams(identit

上下文

在验证“Alice”并获取JWT令牌后使用Virgil Security SDK for iOS swift时,注册时的错误始终表示用户已注册。即使在清除设备或使用新设备后首次登录时也会发生这种情况。此外,当尝试文本的
etree.authEncrypt()
方法时,错误总是表示在设备上找不到私钥,即使
etree.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
    时,出现一个错误,表示设备中没有私钥
Q1 为什么在清除设备或使用新设备后,代码会告诉我用户已注册

简短回答:在已清除的设备或新设备中没有本地私钥

函数的作用是:检查用户是否已经拥有保存在本地存储中的私钥,以及Virgil云上已发布的公钥。如果用户没有,该函数将为用户生成一个新的密钥对,并在本地保存私钥

问题2 为什么
hasPrivateKey
返回true,但在使用
authEncrypt
时,出现一个错误,表示设备中没有私钥

localkeystrage.retrieveKeyPair()
可用于定义私钥存在

最佳做法 为了支持跨多个设备登录,可以使用这种机制。

Q1

为什么在清除一个设备或使用一个新设备后,代码会告诉你 告诉我用户已经注册了吗

注册的
与私钥的存在无关。一个用户只能有一个私钥。一旦它被注册到一个设备上,在第一次向设备添加用户时,如果没有备份到Virgil Cloud,就不能在其他设备上使用它

一旦用户在一台设备上拥有私钥,他们就不能在其他设备上拥有私钥,除非使用密码通过Virgil Cloud获取私钥,或者调用
etree.rotatePrivateKey()