【问题标题】:is machine required for a web application with single page单页 Web 应用程序需要机器吗
【发布时间】:2017-05-09 00:36:49
【问题描述】:

我创建了一个 Web 表单 .net 应用程序,它有一个带有四个输入字段的页面。

我将输入参数存储在视图状态中,以便在回发之间可用。

此应用程序现在部署到实时服务器上,该服务器实际上在两台服务器之间进行负载平衡。 当我加载页面时,它工作正常。但是这个应用程序将被 10,000 名用户。

此应用程序的 web.config 文件中没有机器密钥。我在申请时阅读了文档 加载到网络场(在两台服务器之间进行负载平衡时),需要机器密钥来保存 查看状态信息。

所以我尝试使用以下设置在本地主机上生成机器密钥 加密方式:SHA1 解密方式:自动 验证键: 在运行时自动生成(未选中) 为每个应用程序生成一个唯一的密钥(未选中)

解密密钥: 在运行时自动生成(未选中) 为每个应用程序生成一个唯一的密钥(未选中)

我在实时服务器的 web.config 上使用了生成的密钥,但应用程序无法加载尝试加载登录名 不是我的起始页的页面。

所以我的问题是: 1)我真的需要机器密钥,因为应用程序在没有它的情况下加载? 2) 上千用户同时使用应用页面时,没有机器密钥可以吗? 3) 如果需要机器密钥,它是如何生成的,以及使用什么加密方法、验证密钥和解密密钥 需要用到参数吗?

【问题讨论】:

  • 您在应用程序中使用 ViewState 吗?

标签: asp.net


【解决方案1】:

我不知道你是否需要机器钥匙。但这是您如何生成的:这是一个小控制台程序,它将为您的 web.config 创建一个机器密钥标记。您可以像这样将文本从控制台复制到您的 web.config:

<system.web>
    ...
    <machineKey ... />
  </system.web>

还有程序。免责声明:代码不是我写的,我只是改编了它:

public class KeyCreator
{
    const int VALIDATION_KEY_LENGTH = 24;
    const int DECRYPTION_KEY_LENGTH = 64;

    public static void Main(string[] args)
    {
        string decryptionKey = CreateKey(VALIDATION_KEY_LENGTH);
        string validationKey = CreateKey(DECRYPTION_KEY_LENGTH);

        Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);
        Console.ReadKey();
    }

    static string CreateKey(int numBytes)
    {
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        byte[] buff = new byte[numBytes];

        rng.GetBytes(buff);
        return BytesToHexString(buff);
    }

    static string BytesToHexString(byte[] bytes)
    {
        StringBuilder hexString = new StringBuilder(64);

        for (int counter = 0; counter < bytes.Length; counter++)
        {
            hexString.Append(String.Format("{0:X2}", bytes[counter]));
        }
        return hexString.ToString();
    }
}

【讨论】:

    【解决方案2】:

    我已在本地 IIS 上生成如下机器密钥并应用于配置文件。然后我将它发布到 live 文件夹,它似乎工作正常。

    加密方式:SHA1 解密方式:自动 验证键: 在运行时自动生成(未选中) 为每个应用程序生成一个唯一的密钥(未选中)

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 2011-11-11
      • 2020-01-29
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多