【问题标题】:Machine key in asp.net core 2.0?asp.net core 2.0中的机器密钥?
【发布时间】:2017-10-21 06:16:19
【问题描述】:

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

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

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

我听说过数据保护 api,但我找不到在哪里告诉它使用相同的加密密钥,相反,我找到了让我感到困惑的复杂示例,我所需要的只是让两台服务器了解彼此的加密。

【问题讨论】:

  • 我的假设是您使用的是 Asp.Net Identity。对吗?
  • 是的,正确,asp.net 身份

标签: asp.net asp.net-core-2.0


【解决方案1】:

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

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();

    // ...
}

详细的文章可在同一网站上找到

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

PS:上面贴的代码是同一篇文章,所以如果链接挂了,答案还是完整的

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2011-12-28
相关资源
最近更新 更多