在OWIN中共享旧的FormsAuthentication cookie

问题描述 投票:1回答:1

我们已将两个ASP.NET MVC4 Web应用程序升级到MVC5,为了使用SignalR 2.x,我们不得不在更新的应用程序中使用OWIN。这两个应用程序在web.config中共享相同的machinekeyauthentication部分,如果用户登录app1,他们也会自动登录app 2:

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

在验证用户身份后,两个应用程序都以相同的方式直接创建身份验证票证/ cookie:

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上运行良好,但在更新之后,两个Web应用程序的行为都好像来自另一个应用程序的身份验证cookie无效,而用户在一个应用程序中进行身份验证,但在其他应用程序中仍然未经身份验证。

  • 为什么两个应用程序之间的身份验证票不再可接受?我的理解是,我坚持使用传统的FormsAuthentication方法,并且解密来自cookie的auth票不应该改变。
  • 我可以在兼容OWIN的Web应用程序中使用FormsAuthentication并在我的应用程序之间共享身份验证cookie,还是应该使用OwinContext
authentication asp.net-mvc-5 owin forms-authentication
1个回答
0
投票

web.configsystem.web中添加以下行解决了这个问题:

<httpRuntime targetFramework="4.5" />

不确定.NET 4.5中的FormsAuthentication加密/解密方法与v4.0相比有什么变化。添加上述内容后,用户将在两个应用程序中按预期进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.