我有一个遗留的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))
}
});
Run Code Online (Sandbox Code Playgroud)
我已经将机器密钥设置(以前用于表单身份验证)保持不变.但我删除了两个配置文件中的表单身份验证.
我是否错误配置了某些内容,或者是否需要更多配置才能在具有相同机器密钥的应用程序之间共享OWIN cookie?
UPDATE
新的webforms应用程序列出了cookie但仍未对用户进行身份验证.
更新 请参阅下面的答案.
我的问题的部分答案似乎分布在多个帖子中,但到目前为止,将其放在一起对我来说还没有奏效,所以我希望当这篇文章得到解答时,它将形成更完整的指南
我有一个 ASP.NET Webforms 应用程序 (W1),我想在一段时间内开始升级到单独的 MVC 应用程序 (M1)。包含W1的解决方案已升级到4.5,并在解决方案中创建了M1。W1 使用 ASP.Net 会员框架。
在M1中,我将Authorize属性添加到HomeController中的About页面
[Authorize]
public ActionResult About()
我在 M1 中添加了一个指向“关于”页面的链接,该链接源自 W1 中要求用户登录的页面。
我希望用户能够登录到 W1,单击指向 M1 关于页面的链接并自动登录到 M1。
我已使用此处概述的方法从 W1 中提取了validationKey 和decryptionKey 。尽管这似乎是一个合乎逻辑的步骤,但我不确定是否需要这样做,因为不同的密钥仍然允许用户登录 W1。
第2步按照此处和此处的信息,并经过大量调试后,我修改了项目的 Web.config 文件部分,如下所示;
对于 W1:
<system.web>
<authentication mode="Forms">
<forms name="WRSAUTH"
loginUrl="~/Account/Login.aspx"
defaultUrl="Default.aspx"
protection="All"
timeout="60"
path="/"
domain=".localhost"
requireSSL="false"
slidingExpiration="true"
cookieless="UseCookies"
enableCrossAppRedirects="false" />
</authentication>
<machineKey validationKey="<ValidationKey>"
decryptionKey="<DecryptionKey>"
validation="SHA1"
decryption="AES"/>
<compilation debug="true" targetFramework="4.5">
<httpRuntime maxRequestLength="12288" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
对于 M1:
<system.web> …Run Code Online (Sandbox Code Playgroud)