Мы обновили два веб-приложения 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
?