J'ai des difficultés à comprendre l'API de protection des données. Je veux mettre en place quelques applications Web de noyau net dans un environnement en clusters (tissu de service). Auparavant, vérifiez que chaque machine possède la même clé dans son fichier web.config. Simple. Avec la nouvelle API de protection des données, il semble un peu (lottle!) Un peu plus impliqué. De la documentation here, il semble que cela devrait être aussi simple que de configurer le service de protection des données avec le certificat approprié.API de protection des données de base ASP.Net dans un environnement en cluster
Cependant j'ai essayé ceci:
public static void Main(string[] args)
{
// add data protection services
var serviceCollection = new ServiceCollection();
string thumbPrint = "XXXXXXXXXXXX";
serviceCollection.AddDataProtection()
.ProtectKeysWithDpapiNG($"CERTIFICATE=HashId:{thumbPrint}", flags: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiNGProtectionDescriptorFlags.None);
var services = serviceCollection.BuildServiceProvider();
// create an instance of MyClass using the service provider
var instance = ActivatorUtilities.CreateInstance<MyClass>(services);
instance.RunSample();
}
public class MyClass
{
IDataProtector _protector;
// the 'provider' parameter is provided by DI
public MyClass(IDataProtectionProvider provider)
{
_protector = provider.CreateProtector("Contoso.MyClass.v1");
}
public void RunSample()
{
Console.Write("Enter input: ");
string input = Console.ReadLine();
// protect the payload
string protectedPayload = _protector.Protect(input);
Console.WriteLine($"Protect returned: {protectedPayload}");
// unprotect the payload
string unprotectedPayload = _protector.Unprotect(protectedPayload);
Console.WriteLine($"Unprotect returned: {unprotectedPayload}");
Console.ReadLine();
}
}
Je viens d'obtenir une exception de
System.InvalidOperationException occurred
HResult=0x80131509
Message=No service for type 'Microsoft.AspNetCore.DataProtection.Repositories.IXmlRepository' has been registered.
qui, après des fouilles se retourne que c'est parce qu'il n'y a pas de magasin persistant spécifié pour les clés.
Qu'est-ce qui est conseillé ici? Devrais-je conserver mes clés dans un emplacement central (c'est-à-dire un partage disponible pour toutes mes applications)? Si oui, quelle est la raison?
vous devez être explicite quant à l'endroit où les clés sont conservées. https://docs.microsoft.com/en-gb/aspnet/core/security/data-protection/configuration/overview - essayez '.PersistKeysToFileSystem (new DirectoryInfo (@" \\ serveur \ partage \ répertoire \ ")); par exemple. – Christo
@Christo Merci! Totalement pensé que j'ai mis à jour cette question, j'ai fini par persister mes clés à AzureStorage. – Mardoxx