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

У меня есть приложение ASP.NET, которое отправляет файл cookie аутентификации в приложение 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)                 {

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

Куда и почему пропала кука? В какой части конвейера обработки запросов MVC файл cookie был удален?

  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 ...
        }  

person StringBuilder    schedule 12.11.2012    source источник
comment
Убедитесь, что путь к файлу cookie равен / и что он имеет достаточную дату истечения срока действия.   -  person Nick    schedule 12.11.2012
comment
что вы подразумеваете под словом достаточно? {01/01/0001 00:00:00} достаточно?   -  person StringBuilder    schedule 12.11.2012
comment
Попробуйте установить срок действия на что-то вроде DateTime.UtcNow.AddDays(1); Возможно, браузер считает, что срок действия файла cookie истек с датой и временем, как указано выше.   -  person Nick    schedule 12.11.2012
comment
DateTime.UtcNow.AddDays(1); Все еще не помогает, все еще получаю в Application_BeginRequest MVC {01/01/0001 00:00:00} дату истечения срока действия, как это ... о, мать-природа, что там происходит? :-)   -  person StringBuilder    schedule 12.11.2012
comment
Я столкнулся с аналогичной проблемой; Я не могу просмотреть файлы cookie, созданные из моего приложения VB.NET, в моем приложении C# MVC. Оба они работают на одном компьютере, с одним и тем же ключом компьютера, в одном и том же домене (каждый из них является поддоменом). Но работает наоборот, VB.NET может просматривать файлы cookie из приложения MVC. Есть идеи, что происходит? Кстати, в любом браузере я вижу куки в обоих приложениях: S, помогите, пожалуйста.   -  person julianox    schedule 26.06.2013


Ответы (1)


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

Примечание. Если одно из ваших приложений использует более старые версии платформы .NET, вы должны явно настроить приложения .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

person julianox    schedule 27.06.2013