2015-03-18 4 views
0

Я создаю веб-проект, в котором я использую проверку подлинности с использованием файлов cookie, чтобы проверить, является ли пользователь аутентификацией.Срок действия формы с помощью WebAPI истекает через 5 минут

Все работает нормально, но когда я размещаю это на общем хостинге, сеанс истек через 5 минут бездействия. Я установил тайм-аут в конфигурации до 60 минут.

<authentication mode="Forms"> 
      <forms name=".auth" protection="All" timeout="60"/> 
     </authentication> 

В то время как Login, я создал API под названием login, где я устанавливаю аутентификацию.

FormsAuthentication.SetAuthCookie(".auth", false); 

И проверяю, аутентифицирован ли пользователь в веб-API, и мой API выглядит так.

[Authorize] 
    [RoutePrefix("api/value")] 
    public class ValueController : ApiController 
    { 
     // GET api/value 
     [Route("get")] 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

    } 

Я знаю, что это очень старый/плохой подход для проверки через куки, но это мое унаследованное приложение, и я не могу изменить структуру аутентификации и использовать Owin.

Можно ли предположить, почему он истекает через 5 минут бездействия на совместном хостинге? Он работает правильно на моем местном IIS и не истекает до 60 минут.

Помощь назначена.

+0

App бассейны есть время простоя в дополнение к тайм-аут сеанса веб-сайт. Значение по умолчанию - 20 минут. Это не контролируется web.config, и вам нужно изменить его в настройках iis. – rdans

+0

, но на моем общем хостинге нет выбора. поставщик не позволяет нам это изменить. (Go Daddy) – Moiz

+0

Вероятно, вы не сможете его увеличить. Это сообщение, похоже, подтверждает, что тайм-аут idad godaddy составляет 5 минут: http://www.codeproject.com/Questions/868986/Validation-of-viewstate-MAC-failed - вы можете открыть билет поддержки с godaddy, чтобы спросить, иначе вы можете либо изменить свой хостинг, либо создать какой-то авторесурсный веб-реестр, чтобы поддерживать сайт – rdans

ответ

0

Причина заключается в том, что хостинг-провайдер очищает сеанс, и решение заключается в том, чтобы добавить machineKey в web.config.

<system.web> 
    <machineKey decryption="AES" decryptionKey="ddE3434J4K3J3KLNDFPSODIFSFLKJW34L3OIUF" validation="HMACSHA256" validationKey="07dfdDUIEJSLDJFKLSJFEIOUR3989F8SDF90DF9D0F9DF9SD0F90SDF09SD0F9DF" /> 
</system.web> 

(Пожалуйста, обратите внимание, что это ключевой пример. Вы должны сгенерировать ключ и добавить в конфигурации)

+0

Я позвонил godaddy, чтобы узнать, могу ли я получить машинный ключ, созданный ими для отдельной проблемы: http://stackoverflow.com/questions/42319225/hosted-webapi-application-always-prompt-login. Они говорят, что наши подписки находятся под «общим» сервером, они не могут предоставить машинный ключ. Требуется частный сервер. – jmogera