Перенаправление MVC HTTPS за балансировщиком нагрузки

Я использую MVC5 на некоторых серверах IIS в Amazon EC2 за Amazon Elastic Load Balancer. Серверы IIS работают только по протоколу HTTP, а ELB преобразуется в HTTPS.

Сервер IIS не знает, обращается ли пользователь через HTTPS, поэтому у меня есть правило перезаписи, проверяющее заголовок «X-Forwarded-Proto», чтобы перенаправить пользователя на HTTPS.

К сожалению, когда требуется вход в систему, MVC/IIS перенаправляет пользователя на страницу входа в HTTP.

Если я проверю свой веб-сайт с помощью такого инструмента, как http://www.redirect-checker.org/ Я получаю такие результаты:

http://example.com/

301 Перемещено навсегда (мое правило перезаписи URL)

https://example.com/

302 Found (требуется вход в систему перенаправления -> почему на HTTP?)

http://example.com/Account/Logon?ReturnUrl=%2F

301 Перемещено навсегда (опять же мое правило перезаписи URL)

https://example.com/Account/Logon?ReturnUrl=%2F

200 OK

Я что-то упускаю?

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

Еще лучше, могу ли я каким-то образом предшествовать правилу перенаправления входа и заставить его принудительно использовать HTTPS, чтобы иметь только одно перенаправление?

Большое спасибо!

Приложение: я проверил, что такие команды, как "RedirectToAction", отправляют адрес вида "/Index2", а не весь "http://example.com/Index2". Это нормально, поэтому он сохраняет пользовательский протокол.


person TNT    schedule 17.02.2017    source источник


Ответы (1)


Предполагая, что вы используете аутентификацию с помощью форм ASP.NET, посмотрите в web.config свою конфигурацию Authentication и добавьте requireSsl="true" к элементу <forms>, как показано ниже:

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" requireSSL="true" />
</authentication>
person Tom Hall    schedule 18.02.2017
comment
На самом деле я использую AspNet.Identity v2.2.1. Кажется, это так, но я не смог найти эквивалент requireSSL. - person TNT; 20.02.2017
comment
Возможно, стоит взглянуть на этот вопрос SO: stackoverflow.com/questions/30615017/ - person Tom Hall; 22.02.2017