Совместное использование старого файла cookie FormsAuthentication в OWIN - PullRequest
1 голос
/ 19 марта 2019

Мы обновили два веб-приложения ASP.NET MVC4 до MVC5, и для использования SignalR 2.x нам пришлось использовать OWIN в обновленном приложении.Два приложения имели одинаковые разделы machinekey и authentication в web.config, и если пользователь вошел в приложение 1, они также автоматически вошли в приложение 2:

<machineKey validationKey="<themachinekey>" decryptionKey="<thedecryptionKey>" validation="SHA1" decryption="AES" />
<authentication mode="Forms">
  <forms timeout="2880" name=".ASPAUTH_VOCC" path="/" />
</authentication>

После проверки подлинностипользователь, оба приложения напрямую создают тикет / куки для аутентификации одинаково:

string userData = "ApplicationSpecific data for this user.";

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,
    userName,
    DateTime.Now,
    DateTime.Now.AddMinutes(2880),
    persistent,
    userData,
    FormsAuthentication.FormsCookiePath);

// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
if (persistent)
{
    cookie.Expires = DateTime.Now.AddMinutes(2880);
}

// Create the cookie.
HttpContext.Current.Response.Cookies.Add(cookie);

Следует также отметить, что в процессе обновления я не использовал метод app.UseCookieAuthentication при запуске и предпочел придерживатьсяприведенный выше код для аутентификации.

Хотя этот подход хорошо работал на MVC4, после обновления оба веб-приложения действуют так, как будто cookie-файл аутентификации из другого приложения недействителен, и хотя пользователь проходит проверку подлинности в одном приложении, он все еще не аутентифицирован вдругое приложение.

  • Почему билет проверки подлинности больше не приемлем между двумя приложениями?Насколько я понимаю, я придерживаюсь устаревшего подхода FormsAuthentication, и расшифровка билета проверки подлинности из файла cookie не должна была измениться.
  • Могу ли я использовать FormsAuthentication в OWIN-совместимом веб-приложении и делиться файлом cookie аутентификации междумои приложения или я должен использовать OwinContext?

1 Ответ

0 голосов
/ 06 апреля 2019

Добавление следующей строки в web.config system.web решило проблему:

<httpRuntime targetFramework="4.5" />

Не уверен, что было изменено в методах шифрования / дешифрования FormsAuthentication в .NET 4.5 по сравнению с v4.0,После добавления вышеизложенного пользователь проходит проверку подлинности в обоих приложениях.

...