【问题标题】:How can I use RSA to Encrypt/Decrypt ASP.Net Forms Authentication Ticket如何使用 RSA 加密/解密 ASP.Net 表单身份验证票证
【发布时间】:2012-11-30 22:59:27
【问题描述】:

除了使用 FormsAuthentication.Encrypt / FormsAuthentication.Decrypt,是否可以使用机器密钥存储中现有的 RSA 容器来对票证进行加密/解密。

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

  1. 这可能吗?如果是这样,我该如何覆盖现有的行为来实现这一点。
  2. 如果可能的话,您认为使用 RSA 代替标准加密有什么缺点吗?

【问题讨论】:

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


    【解决方案1】:

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

    您将需要覆盖/替换 .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

    【讨论】:

    • 我在这里错过了一个显而易见的事实,即如果您将公钥公开,任何拥有该公钥的人都可以创建一个 cookie 并将有效的加密身份验证票发送回假身份验证。这也一定是为什么在表单身份验证中默认使用对称身份验证的原因
    猜你喜欢
    • 2012-05-04
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多