Zabezpečené úložiště
Tento článek popisuje, jak můžete použít rozhraní .NET Multi-Platform App UI (.NET MAUI). ISecureStorage
Toto rozhraní pomáhá bezpečně ukládat jednoduché páry klíč/hodnota.
Výchozí implementace ISecureStorage
rozhraní je k dispozici prostřednictvím SecureStorage.Default
vlastnosti. Rozhraní ISecureStorage
i SecureStorage
třída jsou obsaženy v Microsoft.Maui.Storage
oboru názvů.
Začínáme
Pro přístup k funkcím SecureStorage se vyžaduje následující nastavení specifické pro platformu:
Automatické zálohování pro aplikace je funkce Androidu 6.0 (rozhraní API úrovně 23) a novější, která zálohuje data aplikací uživatele (sdílené předvolby, soubory v interním úložišti aplikace a další konkrétní soubory). Data se obnoví, když se aplikace přeinstaluje nebo nainstaluje na nové zařízení. To může mít vliv SecureStorage
na to, že využívá předvolby sdílení, které se zálohují, a když dojde k obnovení, nejde dešifrovat. .NET MAUI tento případ automaticky zpracuje odebráním klíče, aby se mohl resetovat. Případně můžete automatické zálohování zakázat.
Povolení nebo zakázání zálohování
Automatické zálohování pro celou aplikaci můžete zakázat nastavením android:allowBackup
hodnoty false v souboru AndroidManifest.xml . Tento přístup se doporučuje pouze v případě, že plánujete obnovení dat jiným způsobem.
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
Selektivní zálohování
Automatické zálohování je možné nakonfigurovat tak, aby zakázalo zálohování konkrétního obsahu. Můžete vytvořit vlastní sadu pravidel pro vyloučení SecureStore
položek z zálohování.
android:fullBackupContent
Nastavte atribut v AndroidManifest.xml:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
Vytvořte nový soubor XML s názvem auto_backup_rules.xml v adresáři Platforms/Android/Resources/xml s akcí sestavení AndroidResource. Nastavte následující obsah, který obsahuje všechny sdílené předvolby s výjimkou
SecureStorage
:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="${applicationId}.microsoft.maui.essentials.preferences.xml"/> </full-backup-content>
Použití zabezpečeného úložiště
Následující příklady kódu ukazují, jak používat zabezpečené úložiště.
Tip
Je možné, že při volání GetAsync
nebo SetAsync
. Příčinou může být to, že zařízení nepodporuje zabezpečené úložiště, změny šifrovacích klíčů nebo poškození dat. Nejlepší je to zvládnout odebráním a přidáním nastavení zpět, pokud je to možné.
Zápis hodnoty
Uložení hodnoty pro daný klíč v zabezpečeném úložišti:
await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");
Čtení hodnoty
Načtení hodnoty ze zabezpečeného úložiště:
string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");
if (oauthToken == null)
{
// No value is associated with the key "oauth_token"
}
Tip
Pokud není k klíči přidružená hodnota, GetAsync
vrátí hodnotu null
.
Odebrání hodnoty
Pokud chcete odebrat konkrétní hodnotu, odeberte klíč:
bool success = SecureStorage.Default.Remove("oauth_token");
Pokud chcete odebrat všechny hodnoty, použijte metodu RemoveAll
:
SecureStorage.Default.RemoveAll();
Rozdíly mezi platformami
Tato část popisuje rozdíly specifické pro platformu s rozhraním API zabezpečeného úložiště.
SecureStorage
používá rozhraní API předvoleb a sleduje stejnou trvalost dat popsanou v dokumentaci Předvolby s názvem [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Data se ale šifrují pomocí třídy Android EncryptedSharedPreferences
z knihovny zabezpečení Androidu, která zabalí třídu a automaticky šifruje klíče a hodnoty pomocí přístupu se dvěma schématy SharedPreferences
:
- Klíče jsou deterministicky zašifrované, aby bylo možné klíč zašifrovat a správně vyhledat.
- Hodnoty nejsou deterministicky šifrované pomocí AES-256 GCM.
Další informace o knihovně zabezpečení Androidu najdete v tématu Bezpečnější práce s daty na developer.android.com.
Omezení
Pokud ukládáte velké množství textu, může to mít vliv na výkon, protože rozhraní API bylo navržené tak, aby ukládalo malé množství textu.