Подтвердить что ты не робот

Проверка SSO MVC4/IIS/Forms

У меня возникла странная периодическая проблема с MVC4/IIS/Forms Authentication.

У меня есть пара сайтов, которые передают управление друг другу, используя 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

    }
}

Любые идеи?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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