Как я могу поделиться аутентифицированным сеансом на основе .net (C #) между веб-формами и приложениями MVC2? - PullRequest
8 голосов
/ 02 марта 2011

У нас есть небольшое приложение, которое мы создали в свободное время с использованием новейших доступных на тот момент библиотек mvc3 и Entity Framework .net, и развернули его.Руководству это понравилось, и они хотят, чтобы оно интегрировалось в тяжелое устаревшее приложение веб-форм .net 3.5.

Мне нужно как-то использовать одни и те же сеансы аутентификации для двух приложений.Я использую ту же БД и Приложение для аутентификации, используя .net членство и профили поставщиков.Это работает нормально, но пользователям приходится отдельно входить в приложение MVC, даже если они уже вошли в основное приложение.Я открыт для любых предложений: включение сеанса состояний на другом уровне или общих файлов cookie и т. Д.

Каков наилучший способ обойти это требование входа в систему и следует лиМне следует интегрировать приложение mvc в веб-формы или оставить его независимым?Мои основные проблемы, влияющие на принятие решения, - это время, необходимое для полной интеграции и последующего обслуживания приложений.

Ответы [ 4 ]

7 голосов
/ 02 марта 2011

Во-первых, тот факт, что одно приложение ASP.NET MVC здесь не имеет никакого значения:)

Во-вторых, вот один пример того, что делать с MSDN:

http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

Небольшой фрагмент этой страницы:

<configuration>
  <system.web>
    <authentication mode="Forms" >
      <!-- The name, protection, and path attributes must match 
           exactly in each Web.config file. -->
      <forms loginUrl="login.aspx"
        name=".ASPXFORMSAUTH" 
        protection="All"  
        path="/" 
        domain="contoso.com" 
        timeout="30" />
    </authentication>

    <!-- Validation and decryption keys must exactly match and cannot
         be set to "AutoGenerate". The validation and decryption
         algorithms must also be the same. -->
    <machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
      validation="SHA1" />
  </system.web>
</configuration>

.

PS

Совет StriplingWarrior о слиянии обоих приложений, хотя на самом деле не требуется, но может быть очень полезен длябудущие интеграции.Позже вы можете в конечном итоге сделать это в любом случае.

2 голосов
/ 02 марта 2011

Проверка подлинности с помощью форм использует куки для отслеживания пользователей. Файлы cookie могут использоваться только одним доменом. Так, например, если у вас были app1.foo.com и app2.foo.com, просто настройте эти два приложения на использование одного и того же домена cookie. Например, оба файла web.config должны использовать одну и ту же конфигурацию аутентификации форм:

<authentication mode="Forms">
  <forms 
      loginUrl="~/Account/LogOn" 
      timeout="2880" 
      domain="foo.com" 
  />
</authentication>

Вы также должны убедиться, что оба приложения используют одни и те же машинные ключи , поскольку файл cookie для аутентификации, отправленный app1, должен быть расшифрован с помощью app2 с одинаковыми ключами.

0 голосов
/ 02 марта 2011

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

0 голосов
/ 02 марта 2011

Возможно, вы захотите просто интегрировать это приложение в приложение Web Forms напрямую.Они могут сосуществовать в одном приложении.

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