Теперь я вижу странный ответ с нашего сайта IIS, когда мы обновили хост от Win2K3/IIS6 до Win2k8R2/IIS7.5. ASP.Net версия 4.0
У нас есть очень сложное и зрелое веб-приложение, которое использует аутентификацию форм со следующей конфигурацией:
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2000" domain="xx.xx.com" requireSSL="true" />
</authentication>
URL-адрес входа направляется на страницу ASP.Net MVC 3, настроенную для SSL.
Сайт работал как ожидалось в IIS6, но с момента его переноса при успешном входе в файл cookie auth в заголовке ответа отсутствуют атрибуты Secure и HttpOnly. Это проблематично, поскольку у нас есть смешанный контент-сайт со многими страницами HTTP. Файл cookie auth теперь отправляется по каждому запросу, а не только по запросам через HTTPS, и теперь он открыт для уязвимости во время сеанса.
Наша ссылка для выхода успешно отправляет файл cookie с нулевой длиной, который включает атрибуты Secure и HttpOnly.
Здесь исходные ответы после успешного входа и выхода из Fiddler, отредактированные для защиты невинных:)
Login Response:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Set-Cookie: .ASPXAUTH=83FCCA...102D; domain=xx.xx.com; path=/
Date: Fri, 25 Jan 2013 22:53:31 GMT
Content-Length: 84
{...}
Logoff Response:
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: http://xx.xx.com/?...
Set-Cookie: .ASPXAUTH=; domain=xx.xx.com; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; secure; HttpOnly
Set-Cookie: logoff=; path=/
Set-Cookie: ...
Date: Fri, 25 Jan 2013 22:57:01 GMT
Content-Length: 64053
<html><head><title>...
Изменение настройки Integrated Pipeline пула приложений не влияет.
Вот важные части кода создания файла cookie:
var ctx = HttpContextFactory.Current;
var cookie = new HttpCookie(
FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(
new FormsAuthenticationTicket(
SessionId,
false,
Convert.ToInt32(FormsAuthentication.Timeout.TotalMinutes)
)
)
) { Domain = domain };
ctx.Response.Cookies.Add(cookie);
Любые мысли о том, с чего начать искать причину этого?