Как установить 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 и сохранить изменения. Это сохранит мои настройки с помощью моих ключей, и все работает нормально.