【发布时间】:2019-07-28 11:47:04
【问题描述】:
我有两台服务器,在服务器之间的通信中,我检查了 IIS 级别的 Machine Key。现在我在 net core 中有一个新项目,我想像 Asp.net 项目一样检查机器密钥。我正在搜索但找不到解决方案
【问题讨论】:
标签: c# iis asp.net-core asp.net-core-mvc
我有两台服务器,在服务器之间的通信中,我检查了 IIS 级别的 Machine Key。现在我在 net core 中有一个新项目,我想像 Asp.net 项目一样检查机器密钥。我正在搜索但找不到解决方案
【问题讨论】:
标签: c# iis asp.net-core asp.net-core-mvc
ASP.NET Core 不使用 Web.config,即使使用了,它也不使用机器密钥。密码学通过Data Protection API 处理,它以完全不同的方式存储和生成密钥。
如果您需要在 ASP.NET 和 ASP.NET Core 之间共享诸如 cookie 之类的东西,您必须以相反的方式工作并将数据保护 API 插入到您的 ASP.NET 应用程序中,以便它们使用相同的系统作为 ASP.NET 核心。微软为此提供了guide。
【讨论】:
嗯,这有点取决于你在做什么。如果您的项目使用 Microsoft Identity,则 Identity 默认使用机器密钥作为哈希的一部分。因此,就我而言,我的网站会发送一封电子邮件,要求用户验证他们的电子邮件。该链接包含基本上是加密的密码散列 - 部分 - 使用来自它的服务器的机器密钥。
因此,如果用户单击该链接,然后在场中的另一台服务器上结束,则验证检查将失败,除非在负载平衡器后面的各个服务器上将机器密钥设置为相同。
所以目前我还没有找到任何在发布到 IIS 时设置机器密钥的好方法。 web.config 是在从我的 ASP.NET 核心项目发布期间自动生成的。目前我找到的唯一解决方案是在发布项目后手动打开 web.config 并在部署到场中的服务器之前插入机器密钥部分。
【讨论】: