Bezpieczne przechowywanie danych

Moduł AppFramework zawiera wtyczkę Secure Storage QML, umożliwiającą aplikacjom AppStudio przechowywanie poświadczeń, tokenów i innych wrażliwych informacji oraz uzyskiwanie do nich dostępu. Przy użyciu tej wtyczki dane mogą być szyfrowane i przechowywane w lokalizacji dostarczonej przez system przy zapewnieniu dostępności do tych danych wyłącznie za pośrednictwem Twojej aplikacji.

Na urządzeniach z systemem Windows te wartości są przechowywane w usłudze Credential Locker. Na platformach macOS i iOS te wartości są przechowywane w systemowym łańcuchu znaków. Na urządzeniach z systemem Android te wartości są przechowywane w Magazynie kluczy systemu Android. W systemie Linux te wartości są przechowywane w pliku keychain.ini w ustawieniach systemowych.

Aby korzystać z tej funkcjonalności, należy najpierw dołączyć poniższą instrukcję importu:

import ArcGIS.AppFramework.SecureStorage 1.0

Jako ilustracja tej funkcjonalności może służyć przykładowa aplikacja dostępna w aplikacji ArcGIS AppStudio lub w repozytorium GitHub udostępniającym przykładowe rozwiązania dla aplikacji AppStudio.

Zapisz wartość ciągu znakowego

Składnik SecureStorage wtyczki jest typu singleton, co oznacza, że przed użyciem nie wymaga utworzenia swojej instancji. Ten składnik zawiera dwie metody, jedna z nich dokonuje przechowywania wartości, a druga pobierania wartości, a także sygnału onError.

Metoda setValue zapisuje parę klucz-wartość w magazynie. Poniższy przykładowy kod ilustruje funkcjonalność tej metody, zapisując nazwę użytkownika i hasło w magazynie w celu użycia w późniejszym terminie. Pole hasła również ukrywa wprowadzony ciąg wejściowy, chyba że sąsiadujące pole wyboru zostanie zaznaczone.

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)
    }
}

Rozważmy następujące zachowanie metody setValue przy jej użyciu:

  • Maksymalna długość klucza lub wartości zależy od używanego systemu operacyjnego. Można to sprawdzić za pomocą właściwości maximumKeyLength i maximumValueLength. Jeśli zamierzasz zapisać klucz, wartość lub ich kombinację, a ich długość przekracza maksymalną dozwoloną długość, można je podzielić i zapisać oddzielnie.
  • Klucz nie może być pusty ani mieć wartości null.
  • W przypadku użycia tego samego klucza dwukrotnie, poprzednia wartość powiązana z kluczem zostanie zastąpiona.
  • Wprowadzenie pustej wartości dla istniejącego wcześniej klucza spowoduje usunięcie klucza obecnego w łańcuchu znaków.
  • Użytkownicy systemu Android napotkają wyjątek, gdy w kluczach zostaną użyte niektóre znaki specjalne, takie jak np. prawy ukośnik (/).
  • Jeśli metoda value lub setValue nie powiedzie się, zostanie wyzwolony sygnał onError.

Pobierz wartość ciągu znakowego

Metoda value składnika SecureStorage jest jedynym sposobem uzyskania dostępu do danych ciągu znakowego przechowywanych w aplikacji. Zastąpienie pola nazwy użytkownika w poprzednim przykładowym kodzie poniższą modyfikacją spowoduje, że metoda value będzie automatycznie wypełniać pole hasła, jeśli podana nazwa użytkownika jest już przechowywana.

TextField {
    id: username
    placeholderText: "Username"

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