Разверните WebApp в Azure с нулевым временем простоя от VS2015

Я пытаюсь опубликовать свое веб-приложение из VS без простоя. Если вы ищете в Google, вы найдете официальную документацию, в которой говорится об использовании слотов, и сделаете своп позже.

Это хороший подход, но у меня есть другая проблема, когда я делаю своп, логины теряются (посмотрите этот вопрос: ссылка).

Актуальная информация в ссылке:

Сессия не связана с аутентификацией, вы пытаетесь решить ее неправильно.

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

Как я могу это сделать? В AWS у меня были текущие обновления...

Для получения дополнительной информации я использую ASP.NET Core с Identity 3.0

Спасибо!!

3 ответа

Решение

То, что вы видите, это лазурное ограничение прямо сейчас. В то время как веб-сайты Azure будут использовать связку ключей, они видят слоты подкачки как отдельные приложения.

Есть несколько вещей, чтобы попробовать.

Сначала установите общее имя приложения. Это поможет, потому что каждое приложение, которое разделяет связку ключей, изолировано по умолчанию; но если они разделяют имя приложения, они могут делиться ключами

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection();
    services.ConfigureDataProtection(configure =>
    {
        configure.SetApplicationName("my application");
    });
}

Если для Azure этого недостаточно (я, честно говоря, не уверен, что "горячие" замены заканчиваются использованием папки общих ключей Azure Web App), можно объединить это с использованием таблиц данных Azure для хранения ключей шифрования - https://github.com/GrabYourPitchforks/DataProtection.Azure/tree/dev

Между этими двумя он должен получить ключи шифрования, используемые для защиты идентификационных файлов cookie, используемых в ваших приложениях.

Я нашел ответвление для aspnet core 1.0, для тех, кто заинтересован:

https://github.com/prajaybasu/DataProtection.Azure/tree/dev/DataProtection.Azure

Как и другой, он хранит ключи шифрования в учетной записи хранения Azure. Это полностью решило мою проблему.

Начиная с решения Blowdart, я решил свою проблему, так что спасибо.

Andrea

Вы используете состояние сеанса в памяти?

Проблема с "потерянными" именами входа - это проблема архитектуры, а не проблема обновления вашего веб-приложения.

Используйте что-то вроде RedisCache для состояния сеанса. Он не только сохранится при обновлении приложения, но и будет выполнять балансировку нагрузки на нескольких экземплярах сервера. В действующем состоянии вы, вероятно, столкнетесь с этой проблемой при масштабировании до нескольких серверов, а также при обновлении приложения.

Другие вопросы по тегам