Как установить machineKey на сайт Azure

Я запускаю сайт Azure. Всякий раз, когда я развертываю, все выходят из системы, потому что изменяется machineKey.

Я указал machineKey в web.config, но это не решило проблему. Я считаю, это связано с тем, что Azure автоматически перезаписывает machineKey [1].

Я нашел пару подобных вопросов, но ссылки на ссылки на мертвые ссылки.

Итак, какое решение? Конечно, есть способ, чтобы пользователи регистрировались независимо от развертывания на Azure.

Ответ 1

Попробуйте reset раздел конфигурации машинного ключа после Application_Start:

protected void Application_Start()
{
    // ...

    var mksType = typeof(MachineKeySection);
    var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection;
    var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance);

    var newConfig = new MachineKeySection();
    newConfig.ApplicationName = mksSection.ApplicationName;
    newConfig.CompatibilityMode = mksSection.CompatibilityMode;
    newConfig.DataProtectorType = mksSection.DataProtectorType;
    newConfig.Validation = mksSection.Validation;

    newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"];
    newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"];
    newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES
    newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1

    resetMethod.Invoke(mksSection, new object[] { newConfig });
}

Вышеупомянутое предполагает, что вы установите соответствующие значения в разделе <appSettings>:

<appSettings>
  <add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." />
  <add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." />
  <add key="MK_Decryption" value="AES" />
  <add key="MK_ValidationAlgorithm" value="SHA1" />
</appSettings>

Но вы можете загрузить свои фактические значения из любого источника конфигурации, который вам нравится.

Ответ 2

Если Azure переписывает ваш machineKey, вы не можете многое сделать, поскольку это часть их инфраструктуры. Однако существуют и другие методы.

Переопределить FormsAuthentication

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

Пользовательский фильтр проверки подлинности

Самый простой способ - создать фильтр и проверить, проверить, зашифровать файлы с расширением в вашем фильтре. Вам нужно сделать это по методу OnAuthorization и создать новый экземпляр IPrincipal и установить IsAuthenticated в true, если дешифрование было успешным.

OAuth

  • Включить OAuth и создать OAuthProvider. Однако вам нужно будет разместить OAuthProvider на сервере, который находится под вашим контролем, поскольку для этого потребуется машинный ключ.
  • Включить сторонний OAuth, если вы включите OAuth с Google, Facebook и т.д., это будет легко, поскольку пользователь будет перенаправлен провайдеру OAuth, и они будут продолжать автоматически входить в систему и будет создан новый сеанс.

Ответ 3

У меня была такая же проблема, и в моем случае я использовал webdeploy для мастера Azure в VS13. Я думал, что схожу с ума, так как я установил машинный ключ в файле web.config, а затем изменил бы на развернутом web.config автогенерировать. Это что-то в настройках webdeploy script/. Мое решение состояло в том, чтобы открыть живой лазурный сайт из VS13 с помощью Server Explorer, а затем отредактировать файл web.config и сохранить изменения. Это сохранит мои настройки с помощью моих ключей, и все работает нормально.