2013-04-11 3 views
13

У меня странная периодическая проблема с MVC4/IIS/Forms Authentication.MVC4/IIS/Forms Аутентификация Вопрос SSO

У меня есть пара сайтов, которые передают управление друг другу, используя SSO. В большинстве случаев передача обслуживания происходит правильно, и пользователь перенаправляется на следующий сайт по назначению. Однако в некоторых случаях пользователю предлагается снова войти в систему, даже если действительная информация SSO была отправлена ​​через. Метод SSO украшен атрибутом [AllowAnonymous], а web.config также имеет запись о местоположении, предоставляющую доступ к /account/sso всем пользователям.

Похоже, что когда сайт назначения попадает в первый раз - после того, как бассейн приложения разогрет, проблема исчезнет.

Некоторые другие точки:

1 оба сайта являются .net 4, так что не должно быть никаких проблем наследие шифрования.
2. эта проблема случается довольно редко (< 10% времени), так что код сам должен быть звук
3. Хостинг IIS 7.5 на Win7x64 локально, и лазурь - происходит в обоих местах
4. КАЖЕТСЯ не зависит от браузера

<location path="account/sso"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

[Authorize] 
public class AccountController : BaseControllerTestable 
{ 
    public AccountController() 
     : base() 
    { 
    } 

    [AllowAnonymous] 
    public ActionResult SSO(string AuthToken, string Target) 
    { 
     //SSO logic here 

    } 
} 

Любые идеи?

+0

Включен ли экран входа в систему при запуске нового сеанса? Как установить тайм-аут сеанса для обоих веб-приложений? У них есть разные пулы приложений? есть ли у этих бассейнов настройки переустановки? действительно совместимы счетчики производительности сайтов и записывали соответствующие счетчики производительности сайта, такие как тайм-аут сеанса, перекомпиляции? – Siraf

+0

Звучит как определенно не проблема с кодом. Мое предположение было бы либо таймаутом cookie, если вы используете куки-файлы или утилиту пула приложений.Поместите некоторую трассировку в вашу логику аутентификации, выполняется ли метод SSO при возникновении проблемы? – Sergey

ответ

0

Я думаю, что я, наконец, решить его (мы знаем только точно, как только мы хорошо провели время, без рецидива, учитывая, что это было прерывистым так или иначе)

Несколько факторов вошли в игру. Во-первых, я заметил несколько статических элементов (главным образом, файлы css + js), которые попадали в цикл аутентификации, хотя они должны быть свободно доступны, поэтому я добавил правило location в web.config, чтобы убедиться, что они были разрешены анонимным пользователям. Я также добавил исключение маршрута, чтобы игнорировать запросы favicon.ico для хорошей оценки. Казалось, что этот код не срабатывает при самоподключении при аутентификации в первый раз. Наконец, причина, по которой проблема прерывалась, была связана с другой ошибкой, где, если бы были открыты какие-либо другие сеансы (db driven), проблема не возникала. это объясняет, почему ошибка произошла только рано утром, то есть: все сессии с предыдущего дня истекли.

0

Ваш BaseControllerTestable? Есть ли у вас авторизации? Ваш базовый класс будет создан экземпляром, прежде чем он перейдет к вашим другим методам производного класса. Поэтому, если у вас есть [Авторизация] на базовом контроллере, это может быть проблемой для вас.

1

У вас есть атрибут Authorize в вашем классе Controller, что означает, что ваш метод SSO будет иметь AllowAnonymous и Authorize. В этом случае атрибут Authorize выглядит так, как будто его нужно удалить.

Смежные вопросы