asp.net core 2.0中的机器密钥?

use*_*456 11 asp.net asp.net-core-2.0

我在2个不同的服务器上运行相同的asp.net core 2应用程序,但使用相同的数据库来存储用户等.

问题是,如果我在一台服务器上创建并设置用户密码,则运行相同应用程序的另一台服务器将返回无效密码,反之亦然.

几年前我用asp.net 4应用程序遇到了这个问题,我通过为两个应用程序设置相同的机器密钥来修复它.

我听说过数据保护api,但我找不到在哪里告诉它使用相同的加密密钥,而是找到让我感到困惑的复杂例子,而我所需要的只是让两台服务器都能理解对方的加密.

Tar*_*ani 6

您可以将一台服务器保留为主服务器,将一台服 在辅助服务器中禁用自动密钥生成

public void ConfigureServices(IServiceCollection services)
{
     services.AddDataProtection().DisableAutomaticKeyGeneration();
}
Run Code Online (Sandbox Code Playgroud)

或者你可以坚持使用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();

    // ...
}
Run Code Online (Sandbox Code Playgroud)

有一篇详细的文章可供参考

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

PS:上面发布的代码来自相同的文章,因此如果链接失败,答案仍然是完整的