Файл cookie ASP.NET MVC 4 исчезает

У меня есть приложение ASP.NET, которое отправляет куки-файл аутентификации в приложение ASP.NET MVC, используемое в качестве приложения бэк-офиса.

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

Код выглядит так:

 public class SecurityFilter : FilterAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            // TODO: For some reason .AUTHCookie cookie isn't exist in request context of filter,

                           HttpCookie cookie = filterContext.RequestContext.HttpContext.Request.Cookies[".AUTHCookie "];


            if (cookie != null)                 {

С другой стороны я вижу куки, отправленные из приложения ASP.NET в Application_BeginRequest событие в файле Global.asax.

Где и почему исчезло печенье? В какой части конвейера обработки запросов MVC было выброшено печенье?

  protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var cookies = HttpContext.Current.Request.Cookies;
            // HERE I CAN SEE BOTH cookies. In filter action only one cookie was found. The authentication cookie is thrown somewhere ...
        }  

1 ответ

Решение

Я нашел решение для моего сценария. Я добавил compatibilityMode="Framework45" в machinekey в обоих приложениях, и все работает отлично.

Примечание. Если одно из ваших приложений использует более старые версии.NET Framework, вы должны явно настроить приложения.NET 4.5 для использования более ранних режимов совместимости компьютеров, иначе они не смогут зашифровать / расшифровать билет проверки подлинности форм.

Просто чтобы напомнить вам мой сценарий:

WebForms ASP.NET 4.5

<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" />
  <authentication mode="Forms">
    <forms name="_authcookie" domain=".domain.com" loginUrl="Default.aspx?View=1" defaultUrl="Default.aspx?View=1" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" />
  </authentication>

MVC 4
<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" />
   <authentication mode="Forms">
     <forms name="_authcookie" domain=".domain.com" defaultUrl="~/" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" />
    </authentication>

Возможные значения для режима совместимости:

http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

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