2017-10-21 42 views
8

J'ai la même application asp.net core 2 fonctionnant sur 2 serveurs différents mais utilisant la même base de données pour stocker les utilisateurs et etc.Clé de la machine dans le noyau asp.net 2.0?

Le problème est que si je crée et définissez un mot de passe utilisateur dans un serveur, l'autre le serveur exécutant la même application renvoie un mot de passe invalide et vice-versa.

J'ai eu ce problème il y a quelques années avec une application asp.net 4 et je l'ai corrigé en définissant la même clé machine pour les deux applications. J'ai entendu parler de l'API de protection des données, mais je ne trouve pas où dire simplement d'utiliser la même clé de chiffrement, mais je trouve des exemples complexes qui me troublent et tout ce dont j'ai besoin est de faire comprendre aux deux serveurs .

+0

Mon hypothèse est que vous utilisez l'identité Asp.Net. Droite? –

+0

oui correct, l'identité asp.net – user3900456

Répondre

2

Vous pouvez conserver un serveur en tant que serveur principal et en tant que serveur secondaire. Dans la clé automatique disable serveur secondaire génération

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDataProtection().DisableAutomaticKeyGeneration(); 
} 

Ou vous pouvez les persister à Redis

public void ConfigureServices(IServiceCollection services) 
{ 
    // sad but a giant hack :(
    // https://github.com/StackExchange/StackExchange.Redis/issues/410#issuecomment-220829614 
    var redisHost = Configuration.GetValue<string>("Redis:Host"); 
    var redisPort = Configuration.GetValue<int>("Redis:Port"); 
    var redisIpAddress = Dns.GetHostEntryAsync(redisHost).Result.AddressList.Last(); 
    var redis = ConnectionMultiplexer.Connect($"{redisIpAddress}:{redisPort}"); 

    services.AddDataProtection().PersistKeysToRedis(redis, "DataProtection-Keys"); 
    services.AddOptions(); 

    // ... 
} 

Un article détaillé est disponible sur le même

http://www.tugberkugurlu.com/archive/asp-net-core-authentication-in-a-load-balanced-environment-with-haproxy-and-redis

PS: Le code posté ci-dessus est à partir des mêmes articles, de sorte que si le lien va vers le bas, la réponse est toujours complète

+0

est-il un moyen similaire de le stocker dans une base de données SQL Server à la place? – user3900456

+1

Voir si ce https://docs.microsoft.com/en-us/aspnet/identity/overview/extensibility/implementing-a-custom-mysql-aspnet-identity-storage-provider aide, par défaut vous avez FileSystem, Azure et les pilotes du Registre https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers –