【问题标题】:Use MachineKey.Protect Outside of ASP.NET在 ASP.NET 之外使用 MachineKey.Protect
【发布时间】:2015-06-29 15:31:39
【问题描述】:

我需要在 ASP.NET(控制台应用程序、Powershell 等)之外加密一个 cookie,但由于这个 cookie 最终会被我的 MVC 应用程序读取,它需要使用相同的密钥进行加密。

我可以在 ASP.NET 之外使用MachineKey class,但是我无法指定加密类型或密钥,因为这些在应用程序的 web.config 中进行了概述,但在此上下文中不存在。由于没有配置,所以每次都会随机生成密钥。

如何使用下面相同的解密密钥加密数据,以保证以后我的 MVC 应用程序可以成功解密?

<machineKey 
  validationKey="207FE3B8E01D0FF81871D7F3EFC082A14341A7820942D24D3BEF8954CAE53D860F46FBCDDA73F752CE1052D475D442CC8C14FC814739A757D52D152EF5EE179E"
  decryptionKey="326C47E59EB1B38AEA84DBC9633BB770C318A740E477C82F3A8D9506F030D953"
  validation="SHA1" decryption="AES"

/>

【问题讨论】:

  • 您使用的是哪个会员服务提供商?这是身份吗?我知道在旧的 FormsAuthentication 网站上你可以使用FormsAuthentication.Encrypt
  • @br4d 感谢您的评论,但 FormsAuthentication.Encrypt 仍然从 web.config 读取机器密钥。不幸的是,因为我没有 web.config) 我需要一些手动加密的方法。

标签: c# asp.net asp.net-mvc


【解决方案1】:

一些可能的想法。

  1. 只需将 App.config 与您的控制台应用程序一起使用并镜像机器 主项目的 web.config 中的密钥。
  2. 以编程方式获取机器密钥。为此,您需要 机器密钥的路径(也许你可以将它存储在 DB、windows 注册表,或某处?)。 MSDN has some great examples of this method

抓关键基本上是:

Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);
MachineKeySection configSection = (MachineKeySection)config.GetSection("system.web/machineKey");

那么只需使用正确的方法对 cookie 进行加密即可。请记住,一些 ASP.NET 成员资格提供程序会将其他数据序列化到 cookie 中,因此根据您使用的是哪一个,这可能是不可能的。此外,如果您的应用使用 cookie 的 UserData 部分,那么这可能会破坏它。

【讨论】:

  • 如果您使用的是 App.config,那么ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 是获取配置的最简单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2016-05-21
  • 2011-03-06
  • 2011-04-07
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多