Я пытаюсь реализовать HTTPS на отдельных страницах моего сайта. Использование атрибута RequireHttps работает, но вызывает проблемы при тестировании, поскольку у нас нет сертификата, установленного локально.RequireHttps vs from RequireHttpsAttribute
Решение, которое я ищу, должно будет игнорировать localhost и игнорировать один тестовый сервер во время работы на нашем втором тестовом сервере, где у нас есть сертификат.
Некоторые дополнительные фона на этом. Целью является постепенное перемещение сайта на https. Это сайт электронной торговли, поэтому очевидно, что части уже безопасны, и я знаю, что по многим причинам перемещение всего сайта на безопасное - это хорошо. Я также знаю, что как только вы перейдете с страницы A на страницу B, где B будет защищен, тогда он не вернется к HTTP, когда вы вернетесь к A, это нормально. Я хочу переместить сайт поэтапно на случай, если есть проблемы с такими вещами, как несоответствующий контент, карты сайта, SEO, рейтинг google и т. Д.
Некоторые из различных решений, которые я пробовал - я реализовал полученный класс от RequireHttps атрибута следующим образом:
public class CustomRequireHttps : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url != null && (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)
&& !String.Equals(filterContext.HttpContext.Request.HttpMethod, "HEAD", StringComparison.OrdinalIgnoreCase)
&& !filterContext.HttpContext.Request.Url.Host.Contains("localhost")
&& !filterContext.HttpContext.Request.Url.Host.Contains("testing")))
{
base.HandleNonHttpsRequest(filterContext);
}
}
}
И применили этот атрибут на одну страницу, но он не работал должным образом, он либо применяет HTTPS для всех страниц на сайте или не работает вообще.
Я также попытался это решение, которое работает, но только на локальном хосте, а не на двух тестовых серверах:
#if !DEBUG
[RequireHttps]
#endif
Затем я попытался переопределение метода OnAuthorizartion как так:
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.HttpContext != null && filterContext.HttpContext.Request.IsLocal)
{
return;
}
base.OnAuthorization(filterContext);
}
Он работал локально, но как только я получил его на сервере с тестовым сертификатом, вдруг каждая страница HTTPS, которую я не понимаю, поскольку я использовал этот производный атрибут только на одной странице.
Итак, я хочу достичь HTTPS на выбранном числе страниц на моем сайте. Этот HTTPS-запрос необходимо игнорировать на локальном хосте и первом тестовом сервере, но ему необходимо NOT игнорировать на втором тестовом сервере, имеющем сертификат.
Пока это либо не работает вообще, либо находится на каждой странице сайта.
Однако, это кикер. Если я использую атрибут RequireHttps, он отлично работает на втором тестовом сервере, но вызывает проблемы на всех серверах без сертификата. «Прекрасно работает», я имею в виду, что он реализует HTTPS только на тех страницах, где я использовал этот атрибут, и не переключает все страницы на безопасные.
Любые идеи, что я делаю неправильно здесь?
Это как наша текущая система работает, и все в порядке, за исключением того, что она не позволяет выборочной реализации HTTPS. Я понимаю, что, когда вы находитесь в безопасном соединении, он не переключается обратно, и это прекрасно. Цель здесь состоит в том, чтобы в конечном итоге переместить весь сайт на HTTPS, но сделать это на разных этапах. Поэтому в тот момент, когда вы отправляетесь на проверку, это очевидно, но я хочу также добавить одну или две другие страницы, которые являются безопасными. Если с ними нет проблем, переместите еще один или два ... и так далее. –