我有一个遗留的webforms应用程序,正在构建一个新的MVC版本来取代它。两者都需要并排运行一段时间,我需要单点登录才能工作。以前,用户通过webforms应用程序登录,我成功地设置了表单身份验证,以便MVC应用程序可以通过cookie进行身份验证。
现在,MVC应用程序中已完成新的登录表单,现在需要用户从这些表单登录。 MVC应用程序使用Identity 2.x和OWIN。我最初尝试配置OWIN cookie以匹配旧版webforms应用程序中的设置,但无法让webforms应用程序读取cookie并对用户进行身份验证。
从那时起,我决定将Indentity 2.x和OWIN安装到webforms应用程序中。我已将设置设置为相同。到期时间为30分钟,域名为“”,路径为“/”。我可以看到从MVC应用程序生成的cookie,但它没有被webforms应用程序选中。我一直收到拒绝访问的消息。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieName = Settings.Default.CookieName,
CookiePath = Settings.Default.CookiePath,
CookieDomain = Settings.Default.CookieDomain,
LoginPath = new PathString(Settings.Default.CookieLoginPath),
ReturnUrlParameter = Settings.Default.CookieReturnUrl,
ExpireTimeSpan = Settings.Default.CookieExpireTimeSpan,
SlidingExpiration = Settings.Default.CookieSlidingExpiration,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
我已经将机器密钥设置(以前用于表单身份验证)保持不变。但我删除了两个配置文件中的表单身份验证。
我是否配置错误或者是否需要更多配置才能在具有相同机器密钥的应用程序之间共享OWIN cookie?
更新
新的webforms应用程序列出了cookie但仍未对用户进行身份验证。
更新 见下面的答案。
答案 0 :(得分:2)
在创建了两个新应用程序并使其工作之后,我开始了一个基线并从那里开始向后工作,直到我实现了应用程序之间单点登录的目标。我发现了很多东西,包括;
<httpRuntime targetFramework="4.5"/>
。所以最后我确实需要将Identity 2.x和OWIN添加到我的遗留webforms应用程序中,基本上升级到4.5中的新身份验证管道以使其正常工作。
希望这篇文章能帮助节省一些宝贵的时间和精力。
重要更新: 尝试在IIS中部署时,即使您没有在配置中指定任何机器密钥(并且在本地工作),它在部署时也不会工作。最后,我将MVC应用程序用作父项,将旧版webforms应用程序用作子项,这要求父应用程序具有以下配置;
<machineKey decryptionKey="AutoGenerate" validationKey="AutoGenerate" />