iOS Swift - пользователь Virgil Security уже зарегистрирован - закрытый ключ не найден - PullRequest
1 голос
/ 19 июня 2020

Контекст

При использовании Virgil Security SDK для iOS swift после аутентификации «Алисы» и получения токена JWT при регистрации всегда появляется ошибка, указывающая, что пользователь уже зарегистрирован . Это происходит при первом входе в систему даже после очистки устройства или использования нового устройства. Более того, при использовании метода eThree.authEncrypt() для текста ошибка всегда указывает, что закрытый ключ не найден на устройстве, даже если eThree.hasPrivateKey() возвращает истину.

Code Tried

        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 возникает ошибка, говорящая, что в устройстве нет закрытого ключа?

Ответы [ 2 ]

1 голос
/ 22 июня 2020

Q1

Почему после очистки устройства или использования нового устройства код сообщает мне, что пользователь уже зарегистрирован?

Registered не имеет отношения на наличие закрытого ключа. У одного пользователя может быть только один закрытый ключ. После регистрации на одном устройстве его нельзя использовать на других устройствах без создания резервной копии в Virgil Cloud при первом добавлении пользователя на устройство.

Если у пользователя есть закрытый ключ на одном устройстве они не могут иметь закрытый ключ на других устройствах, кроме как путем получения закрытого ключа через Virgil Cloud с паролем или по телефону eThree.rotatePrivateKey().

1 голос
/ 19 июня 2020

Q1

Почему после очистки устройства или использования нового устройства код сообщает мне, что пользователь уже зарегистрирован?

Короткий ответ: Нет локальный закрытый ключ на очищенном или новом устройстве.

Из официальной документации .

Функция EThree.register () проверяет, проверяет ли пользователь уже имеет закрытый ключ, сохраненный в локальном хранилище, и опубликованный ключ publi c в Virgil Cloud. Если у пользователя их нет, функция генерирует новую пару ключей для пользователя, сохраняет закрытый ключ локально ...

Q2

Почему hasPrivateKey вернуть true, но тогда при использовании authEncrypt появляется ошибка, говорящая, что в устройстве нет закрытого ключа?

LocalKeyStorage.retrieveKeyPair() можно использовать для определения наличия закрытого ключа.

Передовой опыт

Для поддержки входа на нескольких устройствах Можно использовать механизм резервного копирования ключей .

...