2014-10-10 3 views
0

Наша компания использует веб-приложение ASP.NET, которое мне необходимо интегрировать с внешним поставщиком удостоверений. Для этого трафик аутентификации в некоторых случаях перенаправляется на обработчик, который ссылается на некоторую внешнюю библиотеку для интерпретации аутентифицированных запросов от поставщика удостоверений.Изменение SessionState в cookieless приложении ASP.NET для переадресации идентификатора сеанса передачи

В таком случае, когда код обработчика должен использоваться для связи с поставщиком удостоверений, перенаправление на него производится в глобальном приложении Application_BeginRequest. Немного как это:

Response.Redirect(tempUrl & "/auth/" & companyName & "/login.ashx")

Проблема в том, что состояние сеанса устанавливается как будучи Cookieless в корневом Web.Config, как это:

<sessionState mode="InProc" [snip] cookieless="true" />

Это означает, что сами перенаправляет снова улавливаются и перенаправляются с префиксом сеанса. Из обработчика login.ashx запрос отправляется на URL-адрес внешнего поставщика идентификации, который проверяет подлинность и отправляет свой ответ обратно как POST на тот же самый URL-адрес обработчика, а именно «http://www.thesite.com/auth/somecompany/login.ahsx», однако на этот раз без идентификатора сеанса курс. Таким образом, POST перенаправляется как GET, снимая ответ со своих данных формы, поэтому аутентификация не может продолжаться. Затем запрос перенаправляется обратно поставщику идентификации в бесконечный цикл.

Итак, мы должны отключить cookieless sessionstate для конкретного обработчика. Мы исследовали несколько вариантов.

Во-первых, атрибут EnableSessionState не может, к сожалению, использоваться в директивах страницы обработчика.

Затем мы попытались изменить sessionstate поведение запроса на конкретный URL ловлей и отключить его в Global.asax.Application_BeginRequest, например, так:

HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Disabled)

Это, казалось, работали в одном но не более того, и мы не знаем, почему.

Мы также попытались выяснить, можно ли динамически изменять динамический режим «cookieless», но соответствующее поле отображается только для чтения.

Мы поместили отдельный файл Web.config в папку «auth» и попытались установить cookieless в true, но это не было разрешено.

Мы можем уловить ответ и посмотреть, перенаправляется ли он в Application_EndRequest, и задавались вопросом, можно ли каким-либо образом предотвратить перенаправление и идентификацию идентификатора сеанса для определенного URL-адреса, но мы не знаем, как это сделать. У кого-нибудь есть подсказки? У нас заканчиваются идеи ...

ответ

0

Мы поняли это, переведя подпапку, о которой идет речь, в виртуальное приложение в IIS и присвоили ему свой собственный Web.Config, где cookieless можно отключить.