如何使用RSA加密/解密ASP.Net Forms身份验证票证

时间:2012-11-27 15:56:35

标签: asp.net forms-authentication rsa encryption-asymmetric

不使用FormsAuthentication.Encrypt / FormsAuthentication.Decrypt,是否可以使用计算机密钥存储区中的现有RSA容器来对故障单进行加密/解密。

原因是我正在开发的ASP.Net应用程序旨在用于多个负载平衡服务器。因此,我需要将机器密钥复制到所有机器中的所有web.config文件中。由于我们已经将非对称加密(RSA)用于其他目的,我们通过bat文件和密钥容器xml自动在所有服务器中安装通用RSA密钥容器。由于这个机制到位,我想使用相同的RSA密钥容器来加密/解密表单身份验证票证。

  1. 这可能吗?如果是这样,我如何覆盖现有行为来实现这一目标。
  2. 如果可能,那么您是否看到使用RSA而不是标准加密的任何缺点?

1 个答案:

答案 0 :(得分:0)

是的,但这需要一些工作。

您需要覆盖/替换.NET附带的标准身份验证模块,并复制所有现有功能,但调用您要使用的RSA加密/解密方法除外。

请参阅http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.encrypt.aspx

如果您使用这些页面,还需要编辑所有标准的内置登录页面。

作为模板,检查FormsAuthenticationTicket的源代码,您将看到如何构造包含UserID,Expiry Date等参数的字符串,然后将该字符串传递给Encrypt方法,然后将其用作cookie值。

然后,您的新身份验证模块必须反转该加密并像以前一样验证用户。

相对较少的收益是相当少的工作,取决于您使用RSA的标准加密方法有多么糟糕(他们已经提供了一些强大的包围方法,见http://www.sourcetree.net/sourcetree/Development/Aspnet%20Examples/GenerateMachineKeyForWebConfig.aspx