보안 저장소

AppFramework에는 보안 저장소 QML 플러그인이 포함되어 있습니다. 이 플러그인을 사용하면 AppStudio 앱에서 자격 증명이나 토큰과 같은 중요한 정보를 저장하고 접근할 수 있습니다. 이 플러그인을 사용하면 데이터를 암호화하고, 앱에서만 접근할 수 있는 데이터가 포함된 시스템 제공 위치에 저장할 수 있습니다.

Windows의 경우 이러한 값은 자격 증명 보관에 저장됩니다. macOS 및 iOS에서는 시스템 키 집합에 이러한 값이 저장됩니다. Android에서는 Android KeyStore에 이러한 값이 저장됩니다. Linux의 경우 이러한 값은 시스템 설정의 keychain.ini 파일에 저장됩니다.

이 기능을 사용하려면 먼저 다음과 같은 가져오기 문을 포함해야 합니다.

import ArcGIS.AppFramework.SecureStorage 1.0

이 기능의 예시로 ArcGIS AppStudio 또는 AppStudio 샘플 GitHub 저장소에서 제공되는 샘플 앱을 참고하세요.

문자열 값 저장

플러그인의 SecureStorage 컴포넌트는 단일 항목입니다. 즉, 이 컴포넌트는 사용 전에 인스턴스화할 필요가 없습니다. 이 컴포넌트는 2개의 메소드 즉, 값을 저장하는 메소드와 onError 신호뿐 아니라 값을 검색하는 메소드로 구성됩니다.

setValue 메소드는 키 값 쌍을 저장소에 저장합니다. 다음의 코드 샘플에서는 나중에 사용할 수 있도록 사용자 이름과 비밀번호를 저장하는 메소드의 기능을 보여줍니다. 또한 password 필드는 옆의 체크 박스가 선택되어 있지 않는 한 제공한 입력이 숨겨집니다.

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 메소드를 사용할 때는 다음과 같은 동작을 검토하세요.

  • 키 또는 값의 최대 길이는 운영 체제에 따라 다릅니다. 이러한 값은 maximumKeyLengthmaximumValueLength 등록정보에서 확인할 수 있습니다. 저장하려는 키나 값 또는 이 두 개의 조합이 최대 길이보다 큰 경우 이들을 각각 저장하기 전에 분할하는 것이 좋습니다.
  • 키는 null이거나 비어 있을 수 없습니다.
  • 동일한 키를 두 번 사용할 경우 키와 연결된 이전 값을 덮어쓰게 됩니다.
  • 기존 키에 대해 빈 값을 제공하면 키 집합에 있던 키가 제거됩니다.
  • Android 사용자의 경우 슬래시(/) 등의 특정 특수 문자가 키에 사용되면 예외가 발생합니다.
  • value 또는 setValue 메소드가 실패하면 onError 신호가 트리거됩니다.

문자열 값 검색

SecureStorage의 value 메소드는 앱에서 저장된 문자열 데이터에 접근하는 유일한 방법입니다. 이전 코드 샘플의 사용자 이름 필드를 다음의 수정된 버전으로 바꿀 경우 value 메소드는 비밀번호 필드를 자동으로 채우는 데 사용됩니다(제공된 사용자 이름이 이미 저장되어 있는 경우).

TextField {
    id: username
    placeholderText: "Username"

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