Xamarin.Essentials: 보안 스토리지

SecureStorage 클래스는 간단한 키/값 쌍을 안전하게 저장하는 데 도움이 됩니다.

시작하기

이 API를 사용하기 전에 라이브러리가 제대로 설치되고 프로젝트에 설정되어 있는지 확인하기 위해 Xamarin.Essentials에 대한 시작 가이드를 읽어보세요.

SecureStorage 기능에 액세스하려면 다음과 같은 플랫폼 특정 설정이 필요합니다.

앱에 대한 자동 백업은 Android 6.0(API 레벨 23) 이상의 기능으로, 사용자의 앱 데이터(공유 기본 설정, 앱 내부 스토리지의 파일 및 기타 특정 파일)를 백업합니다. 앱을 다시 설치하거나 새 디바이스에 설치하면 데이터가 복원됩니다. 이는 백업된 공유 기본 설정을 이용하며 복원 시 암호를 해독할 수 없는 SecureStorage에 영향을 줄 수 있습니다. Xamarin.Essentials는 키를 제거해서 다시 설정할 수 있도록 하여 자동으로 이러한 경우를 처리하지만, 자동 백업을 사용하지 않도록 설정하면 추가 단계를 수행할 수 있습니다.

백업 사용 또는 사용 안 함

AndroidManifest.xml 파일에서 android:allowBackup 설정을 false로 지정하여 전체 애플리케이션의 자동 백업을 사용하지 않을 수 있습니다. 이 방법은 다른 방법으로 데이터를 복원하려는 경우에만 권장됩니다.

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>

선택적 백업

특정 콘텐츠가 백업되지 않도록 자동 백업을 구성할 수 있습니다. 사용자 지정 규칙 집합을 만들어 SecureStore 항목이 백업되지 않도록 제외할 수 있습니다.

  1. AndroidManifest.xml에서 android:fullBackupContent 특성을 설정합니다.

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. AndroidResource의 빌드 작업으로 Resources/xml 디렉터리에 auto_backup_rules.xml이라는 새 XML 파일을 만듭니다. SecureStorage를 제외한 모든 공유 기본 설정을 포함하는 다음 콘텐츠를 설정합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
        <include domain="sharedpref" path="."/>
        <exclude domain="sharedpref" path="${applicationId}.xamarinessentials.xml"/>
    </full-backup-content>
    

보안 스토리지 사용

클래스에서 Xamarin.Essentials에 대한 참조를 추가합니다.

using Xamarin.Essentials;

지정된 의 값을 보안 스토리지에 저장하려면:

try
{
  await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

보안 스토리지에서 값을 검색하려면:

try
{
  var oauthToken = await SecureStorage.GetAsync("oauth_token");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

참고 항목

요청된 키와 연결된 값이 없는 경우 GetAsyncnull을 반환합니다.

특정 키를 제거하려면 다음을 호출합니다.

SecureStorage.Remove("oauth_token");

모든 키를 제거하려면 다음을 호출합니다.

SecureStorage.RemoveAll();

GetAsync 또는 SetAsync를 호출할 때 예외가 throw될 수 있습니다. 이 예외는 보안 스토리지, 암호화 키 변경 또는 데이터 손상을 지원하지 않는 디바이스에 의해 발생할 수 있습니다. 가능하면 설정을 제거했다가 다시 추가하여 이 예외를 처리하는 것이 가장 좋습니다.

플랫폼 구현 관련 정보

Android 키 저장소를 사용하여 [YOUR-APP-PACKAGE-ID].xamarinessentials라는 파일 이름으로 공유 기본 설정에 저장되기 전에 값을 암호화하는 데 사용되는 암호화 키를 저장합니다. 공유 기본 설정 파일에 사용되는 키(에 대한 인 암호화 키 아님)는 SecureStorage API로 전달되는 키의 MD5 해시입니다.

API 레벨 23 이상

최신 API 레벨에서 AES 키는 Android 키 저장소에서 가져오며, AES/GCM/NoPadding 암호화에 사용되어 값이 공유 기본 설정 파일에 저장되기 전에 암호화합니다.

API 레벨 22 이하

이전 API 레벨에서 Android 키 저장소는 RSA 키 저장만 지원합니다. 이 키는 RSA/ECB/PKCS1Padding 암호화와 함께 사용되어 AES 키(런타임에 임의로 생성됨)를 암호화하며, 아직 생성되지 않은 경우 공유 기본 설정 파일의 SecureStorageKey 키 아래에 저장됩니다.

SecureStorage기본 설정 API를 사용하며 기본 설정 문서에 설명된 것과 동일한 데이터 지속성을 따릅니다. 디바이스가 API 레벨 22 이하에서 API 레벨 23 이상으로 업그레이드되는 경우, 앱을 제거하거나 RemoveAll을 호출하지 않는 한 이 유형의 암호화가 계속 사용됩니다.

제한 사항

이 API는 소량 텍스트를 저장하기 위한 것입니다. 대량 텍스트를 저장하는 데 사용하려고 하면 성능이 느려질 수 있습니다.

API

Channel 9YouTube에서 더 많은 Xamarin 비디오를 확인하세요.