Изменение аутентификации в формах запуска заголовка User-Agent - PullRequest
5 голосов
/ 27 сентября 2011

У меня есть приложение, созданное с использованием ASP.NET MVC 3.0. Он использует встроенную проверку подлинности форм asp.net без состояния сеанса и файлы cookie в браузере для идентификации пользователя, делающего запросы.

Теперь, когда я тестирую приложение с использованием IE9, типичный HTML-запрос отправляет этот пользовательский агент в заголовок, и все работает нормально.

Пользователь-агент: Mozilla / 5.0 (совместимый; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 5.0)

Однако в приложении есть одна страница с контейнером ActiveX, в котором размещается Microsoft Word в браузере. Цель этого контейнера ActiveX состоит в том, чтобы позволить вам вносить изменения в текстовый документ; нажмите кнопку, чтобы отправить этот текстовый документ вместе с изменениями на нашем сервере, чтобы его можно было сохранить.

В элементе управления ActiveX - компоненте Office Viewer с веб-сайта www.ocxt.com имеется метод HttpPost (), который отправляет содержимое просматриваемого документа на сервер.

Когда вы вызываете HttpPost (), он правильно отправляет все те же куки, но использует другую строку User-Agent.

User-Agent: Mozilla / 4.0 (совместимый; MSIE 5.5; Windows NT 4.0)

Агент UserAgent, использующий строку MSIE 5.5, по-видимому, заставляет ASP.NET или MVC не отправлять запрос соответствующему контроллеру, а вместо этого отправляет ответ о перенаправлении на страницу входа в систему, даже если файл cookie является правильным для сеанса. Я провел тест с Fiddler и попытался использовать MSIE 6.0, 7.0, 8.0, и они, кажется, работают нормально, поэтому, в частности, 5.5 вызывает перенаправление части стека сервера на страницу входа.

Раньше эта страница работала нормально, поэтому я не уверен, что что-то изменилось в последних версиях ASP.NET/MVC, или это потому, что я перешел на IE9.0, но в основном я бы хотелось бы узнать, можно ли сказать ASP.NET, чтобы он не учитывал User-Agent при определении того, был ли сеанс уже аутентифицирован или нет.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

IIRC произошло изменение в ASP.NET 4.0, в котором проверка подлинности с помощью форм использует пользовательский агент для определения того, поддерживает ли он файлы cookie, и, если он не является распознанным или неподдерживаемым пользовательским агентом, он просто не использует файл cookie для проверки подлинности. Вам нужно будет изменить пользовательский агент HTTP-запроса.

2 голосов
/ 06 декабря 2012

Как отключить это поведение по умолчанию для веб-сервера для проверки поддержки файлов cookie для пользовательского агента в файле web.config и принудительного использования файлов cookie для всех браузеров ...

<system.web>
    <authentication mode="Forms">
        <forms cookieless="UseCookies" />
    </authentication>
</system.web>

Что раздражает в этой настройке по умолчанию, так это то, что некоторые действительные заголовки User-Agent в новых браузерах приводят к игнорированию файлов cookie.

cookie-файл формы этого User-Agent НЕ игнорируется ...

Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3

cookie-файл формы этого агента пользователя игнорируется ...

Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; en-us) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/23.0.1271.91 Mobile/10A523 Safari/8536.25

Но добавление атрибута cookieless="UseCookies" скажет ASP.NET использовать файлы cookie из всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...