我们已经将两个ASP.NET MVC4 Web应用程序升级到了MVC5,为了使用SignalR 2.x,我们必须在更新的应用程序中使用OWIN
。
这两个应用程序在web.config中共享相同的machinekey
和authentication
部分,并且如果用户已登录到app1,则它们也将自动登录到应用程序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票证。FormsAuthentication
并在应用程序之间共享身份验证cookie,还是应该使用OwinContext
? 答案 0 :(得分:0)
在web.config
的{{1}}中添加以下行解决了该问题:
system.web
与v4.0相比,不确定.NET 4.5中FormsAuthentication加密/解密方法中进行了哪些更改。添加上述内容后,将在两个应用程序中按预期对用户进行身份验证。