Может ли приложение ASP.NET 4.0 на сайте ASP.NET 2.0 использовать один и тот же файл cookie проверки подлинности с помощью форм? - PullRequest
7 голосов
/ 13 января 2012

См. Обновление внизу вопроса

У меня есть веб-приложение ASP.NET 2.0 (скажем, https://mysite.somedomain.com/), которое использует проверку подлинности на основе форм.Я хочу интегрировать веб-приложение ASP.NET 4.0 на этом сайте по адресу https://mysite.somedomain.com/NewApp/.Auth Forms работает над внешним приложением, но внутреннее приложение отклоняет cookie.

web.config во внешнем (ASP.NET 2.0) веб-приложении содержит:

<httpCookies requireSSL="true"/>
<authentication mode="Forms">
    <forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All" 
           path="/" timeout="90" requireSSL="true" slidingExpiration="true"/>  
</authentication>
<machineKey (same machine key is in both configs)  
    validation="SHA1"
    decryption="AES"/>
<authorization>
  <deny users="?"/>
  <allow users="*" />
</authorization>

web.config на внутреннем веб-приложении (ASP.NET 4.0) содержит:

<authentication mode="Forms">
    <forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All" 
           path="/" timeout="90" requireSSL="true" slidingExpiration="true"
           ticketCompatibilityMode="Framework20"/>  
</authentication>
<machineKey (same machine key is in both configs)  
    validation="SHA1"
    decryption="AES"/>

Это код в Login.aspx.cs, который устанавливает cookie при успешной аутентификации:

FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(
        1, 
        ApplicationContext.User.Identity.Name, 
        DateTime.Now, 
        DateTime.Now.AddMinutes(90), 
        false, 
        ApplicationContext.User.Identity.SessionID.ToString()
    );
HttpCookie cookie = 
   new HttpCookie(
       FormsAuthentication.FormsCookieName, 
       FormsAuthentication.Encrypt(ticket)
   );

cookie.Path = FormsAuthentication.FormsCookiePath;
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);

Если я захожу во внешнее веб-приложение, а затем перехожу на страницу во внутреннем веб-приложении, он перенаправляет на страницу входа и записывает Forms authentication failed for the request. Reason: The ticket supplied was invalid. в журнал событий на сервере.

Как сделатьЯ получаю билет проверки подлинности форм ASP.NET 2.0, который будет принят внутренним веб-приложением ASP.NET 4.0?

Обновление : он работает под HTTPS IIS 7.5, но не под HTTPS IIS 7.0,Проводим дальнейшие исследования.

Обновление 2 : мы применили Server 2008 SP2 к серверу вместе с последним патчем для DoS с хэш-коллизиями, и с тех пор сработал обмен файлами cookie.

Ответы [ 4 ]

4 голосов
/ 04 июня 2013

В дополнение к сохранению почти всех вышеупомянутых значений, вам необходимо установить атрибут compatibilityMode элемента machineKey в файле конфигурации приложения 4.0:

<machineKey compatibilityMode="Framework20SP2" validationKey="THE_KEY" decryptionKey="ANOTHER_KEY" validation="SHA1" />
1 голос
/ 13 января 2012

Я предполагаю, что вы прочитали это - http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx - возможно, удалите атрибут ticketCompatibilityMode из вашего приложения 4.0, или хотя бы убедитесь, что они одинаковые.

0 голосов
/ 13 июня 2014

Необходимо убедиться, что оба приложения имеют одинаковый ключ шифрования в файлах web.config

<machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
      validation="SHA1" />

Аутентификация с помощью форм в приложениях

0 голосов
/ 17 января 2014

Добавьте этот набор приложений в оба файла web.config:

add key = "aspnet: UseLegacyFormsAuthenticationTicketCompatibility" value = "true"

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