asp.net 核心 2.0 中的机器密钥?
Machine key in asp.net core 2.0?
我在 2 台不同的服务器上有相同的 asp.net 核心 2 应用程序 运行,但使用相同的数据库来存储用户等。
问题是,如果我在一台服务器上创建和设置用户密码,另一台服务器 运行 相同的应用程序 returns 密码无效,反之亦然。
几年前我在一个 asp.net 4 应用程序中遇到了这个问题,我通过为两个应用程序设置相同的机器密钥来修复它。
我听说过数据保护 api,但我找不到在哪里告诉它使用相同的加密密钥,相反,我找到了让我感到困惑的复杂示例,我只需要同时制作两者服务器了解彼此的加密。
您可以将一台服务器作为主要服务器,将一台作为辅助服务器。在辅助服务器中禁用自动密钥生成
using Microsoft.AspNetCore.DataProtection;
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection().DisableAutomaticKeyGeneration();
}
或者您可以将它们持久化到 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();
// ...
}
同上有详细文章
PS: 上面贴出的代码来自同一篇文章,所以如果link下去,答案还是完整的
我在 2 台不同的服务器上有相同的 asp.net 核心 2 应用程序 运行,但使用相同的数据库来存储用户等。
问题是,如果我在一台服务器上创建和设置用户密码,另一台服务器 运行 相同的应用程序 returns 密码无效,反之亦然。
几年前我在一个 asp.net 4 应用程序中遇到了这个问题,我通过为两个应用程序设置相同的机器密钥来修复它。
我听说过数据保护 api,但我找不到在哪里告诉它使用相同的加密密钥,相反,我找到了让我感到困惑的复杂示例,我只需要同时制作两者服务器了解彼此的加密。
您可以将一台服务器作为主要服务器,将一台作为辅助服务器。在辅助服务器中禁用自动密钥生成
using Microsoft.AspNetCore.DataProtection;
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection().DisableAutomaticKeyGeneration();
}
或者您可以将它们持久化到 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();
// ...
}
同上有详细文章
PS: 上面贴出的代码来自同一篇文章,所以如果link下去,答案还是完整的