Почему происходит сбой MachineKey.Unprotect, если для validationKey и encryptionKey заданы автоматически сгенерированные значения? - PullRequest
1 голос
/ 28 января 2020

После извлечения ключей проверки и шифрования с использованием приведенного ниже кода я установил указанные ключи в файле web.config, надеясь, что все, что было создано с помощью автоматически сгенерированных ключей, будет расшифровано с помощью статически установленных ключей.

Это, однако, не так, и поэтому все, что генерируется MachineKey.Protect, когда ключи генерируются автоматически, приводит к сбою MachineKey.Unprotect, когда ключи установлены, несмотря на то, что ключи теоретически идентичны.

У меня:

  • проверено, что MachineKey.Unprotect отлично работает для значений, генерируемых MachineKey.Protect при автоматической генерации ключей,
  • перепробовал все Значения <machineKey> validation, encryption и compatibilityMode,
  • проверили, что приведенный ниже код возвращает те же ключи независимо от того, установлены они в файле web.config или сгенерированы автоматически (что является ожидается)

К сожалению, установка ключей для чего-то нового не возможна, так как это сделает недействительными все существующие токены.

Любая помощь будет принята с благодарностью!

Код, используемый для извлечения автоматически сгенерированных ключей:

protected void Page_Load (object sender, EventArgs e)
{
  MachineKeySection section = (MachineKeySection) 
      ConfigurationManager.GetSection ("system.web/machineKey");

  BindingFlags flags = 
      BindingFlags.Instance | 
      BindingFlags.NonPublic | 
      BindingFlags.GetProperty;

  Func<string, byte[]> propertyReader = name => (byte[]) section
      .GetType ()
      .GetProperty (name, flags)
      .GetValue (section, null);

  string key = ConvertToHex (
    propertyReader ("DecryptionKeyInternal"));

  string iv = ConvertToHex (
    propertyReader ("ValidationKeyInternal"));
}

private string ConvertToHex (byte[] binary)
{
  return binary.Aggregate (
      new StringBuilder (), 
      (acc, c) => acc.AppendFormat ("{0:x2}", c), 
      acc => acc.ToString());
}

Источник кода: https://web.archive.org/web/20140329202612/http: //aspnetresources.com/blog/how_to_read_auto_generated_machinekey

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...