Классическая интеграция ASP и ASP.NET

В предыдущей работе у нас было классическое приложение ASP, которое никто не хотел мигрировать в ASP.NET. То, что он сделал, он сделал очень хорошо.

Однако необходимо было добавить некоторые новые функции, которые казались наилучшим образом подходящими для ASP.NET. Было принято решение позволить системе стать странным гибридом ASP и ASP.NET.

Нашим самым большим камнем преткновения было управление сессиями, и мы взломали решение для передачи значений сессий через переменные формы. Я говорил с другими, которые решали эту проблему через куки.

Оба метода кажутся ужасным клугом (в дополнение к ужасно небезопасному).

Есть ли лучший или более чистый способ или это просто плохая идея начинать с того, что обсуждение этой темы бессмысленно?

6 ответов

Решение

Не можете ли вы сохранить данные сеанса в хранилище данных на сервере? то есть файл XML, база данных и т. д. Затем можно передать только хэш (рассчитанный на основе некоторых критериев, который надежно идентифицирует сеанс) на страницу.NET, которая может забрать данные из хранилища данных с помощью этого идентификатора и заполнить данные сеанса., Это по-прежнему означает необходимость каждый раз передавать запросы из ASP в ASP.NET через прокси-сервер, чтобы гарантировать наличие последних данных сеанса в каждом приложении, но я не знаю альтернативного способа достижения этого, боюсь.

Мне приходилось сталкиваться с той же проблемой. В моем случае я зашифровал ключ в куки и использовал базу данных для любой другой информации. Я написал шифрование в.NET и попытался расшифровать идентификатор на стороне ASP. Существует некоторая странность, связанная со строкой base-64, в том, что ASP не получит ту же строку, что и.NET, поэтому вам, возможно, придется сделать то же самое, что и я, и переписать строку base-64 в шестнадцатеричный эквивалент или какой-то аналог наименьшего общего знаменателя. тактика. Это относительно безопасно (за исключением атаки XSS).

Я должен был бы согласиться с Уэсом П... каковы долгосрочные цели? Если долгосрочной целью является миграция классического ASP-приложения на ASP.NET, то я думаю, что краткосрочное исправление, каким бы оно ни было, сработает. Если в долгосрочной перспективе необходимо сохранить классическое приложение ASP, то лучше использовать более надежное решение для управления сеансами, аналогичное тому, которое рекомендовал Оглестер.

Я не знаю ни одного более чистого способа сделать это в общем случае. Но, возможно, вы можете более конкретно описать, в каком состоянии вы находитесь между системами? В вашем конкретном случае может быть более чистое решение. Состояние объекта сеанса не всегда лучший способ сохранить состояние.

Ну, в конечном счете, лучшей идеей, вероятно, было бы преобразовать приложение ASP в.NET. Я думаю, что, вероятно, само собой разумеется. Если безопасность представляет собой серьезную проблему, есть шаги, которые вы можете предпринять в отношении шифрования и поддержания целостности информации о сеансе, чтобы сделать ее более безопасной, например, некоторое симметричное шифрование и хеширование, а что нет.

Вы можете создать новое приложение .NET Web Forms, включить в него свой классический код .asp и добавить следующее в файл web.config. Обязательно запустите пул приложений в режиме интегрированного конвейера .

Это обеспечит обратную совместимость модулей проверки подлинности (например, проверки подлинности с помощью форм) с ASP Classic. Ваш код ASP Classic будет защищен теми же механизмами аутентификации, которые использует ваш код .NET (как определено в web.config), без необходимости реализовывать собственные механизмы, как вы упомянули.

        <system.webServer>
    <modules>
      <remove name="FormsAuthenticationModule" />
      <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
      <remove name="UrlAuthorization" />
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
      <remove name="DefaultAuthentication" />
      <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
      <remove name="Session" />
      <add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" />
    </modules>
  </system.webServer> 
Другие вопросы по тегам