Безопасное хранилище

В AppFramework входит подключаемый модуль Secure Storage QML, позволяющий приложениям AppStudio хранить и получать доступ к конфиденциальной информации, такой как учетные данные и токены. С помощью этого модуля, данные можно зашифровывать и хранить в системном хранилище, доступном только для вашего приложения.

На устройствах с Windows, эти значения хранятся в Credential Locker. На macOS и iOS, эти значения хранятся в System Keychain. На устройствах с Android, эти значения хранятся в Android Keystore. На Linux эти значения хранятся в файле keychain.ini в настройках системы.

Чтобы использовать эту функциональность, вы сначала должны включить следующие утверждения импорта:

import ArcGIS.AppFramework.SecureStorage 1.0

Пример этой функции можно посмотреть в образце приложения, доступном в ArcGIS AppStudio, или в образцах AppStudio в репозитории GitHub.

Хранение значения строки

Компонент SecureStorage является единичным подключаемым модулем, это означает, что его не нужно настраивать перед использованием. Компонент состоит из двух методов, один для хранения значений, а второй – для извлечения значений, а также сигнала onError.

Метод setValue сохраняет пару ключ-значение в хранилище. В следующем примере кода показана работа методов, сохраняющих имя и пароль для последующего использования. Пароль также вводится скрыто, если только не включена опция его отображения.

TextField {
    id: username
    placeholderText: "Username"
}

TextField {
    id: password
    placeholderText: "Password"
    anchors.left: username.right
    echoMode: passwordVisible.checked === true ? TextInput.Normal : TextInput.PasswordEchoOnEdit
}

CheckBox {
    id: passwordVisible
    anchors.left: password.right
}

Button {
    id: secureButton
    text: qsTr("Store Combination")
    anchors.top: username.bottom
    onClicked: {
        SecureStorage.setValue(username.text,password.text)
    }
}

Рассмотрим следующее поведение метода setValue при его использовании:

  • Максимальная длина ключа или значения зависит от ОС. Их можно включить с помощью свойств maximumKeyLength и maximumValueLength. Если ключ или значение, или их комбинация, превышает максимальную длину, попробуйте разбить их и сохранить по-отдельности.
  • Ключ не может быть пустым или нулевым.
  • Если вы дважды используете один и тот же ключ, предыдущее значение, связанное с этим ключом, будет перезаписано.
  • Ввод пустого значения ключа приведет к удалению ключа, заданного в последовательности.
  • Пользователи Android могут столкнуться с проблемой при использовании в ключе некоторых специальных символов, таких как слеш (/).
  • Если методы value или setValue дают сбой, вызывается сигнал onError.

Извлечение значения строки

Метод value в SecureStorage – единственный способ доступа к данным строки, сохраненным приложением. Замена поля имени пользователя в предыдущем примере кода на следующий измененный вариант, позволит методу value автоматически заполнять поле пароля, если указанное имя уже сохранено.

TextField {
    id: username
    placeholderText: "Username"

    onEditingFinished: {
        password.text = SecureStorage.value(username.text)
    }
}