我有一台服务器,其中的machine.config声明如下:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/>
未指定解密密钥,它是自动生成的。我要将其移至新服务器。如何迁移解密和验证密钥,以便数据库可以在新服务器上使用?
答案1
这取决于 ASP.NET 应用程序的编写方式。如果使用内置成员资格提供程序,您很可能运气不佳,因为成员资格提供程序每次都使用机器密钥来散列密码,假设它们被散列,或者它们可能只是被加密。
它还使用机器密钥进行会话状态和视图状态编码。
如果应用程序有自己的会员提供商,它甚至可能不会利用机器密钥,在这种情况下您可能能够恢复它们。无论哪种方式,恐怕都不太好。
您确实应该让开发人员在应用程序的 web.config 文件中插入自定义机器密钥,如果您也打算迁移到 Web 场,您也必须这样做。
答案2
我认为你做不到,至少除非你读取 machinekey 值的代码在您的应用程序中。
我非常确定密钥仅用于生成 sessionid,将应用程序移至使用相同数据库的新服务器不会有任何坏处。这是基于以下事实:应用程序池重新启动时会重新生成机器密钥,而应用程序池重新启动不会使之前存储的密码无效(我希望如此)。
这篇博客文章中有关于此主题的更多详细信息:http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken