【问题标题】:OWIN Authentication cookie sharing between ASP.NET MVC and Webforms Applications with same MachineKeyASP.NET MVC 和具有相同 MachineKey 的 Webforms 应用程序之间的 OWIN 身份验证 cookie 共享
【发布时间】:2015-08-01 10:58:28
【问题描述】:

我有一个旧的 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?

更新

  1. 使用个人用户帐户创建了一个新的网络表单应用程序。
  2. 添加了 MachineKey
  3. 将 MVC 应用程序的配置更改为标准 设置(复制新项目)

新的网络表单应用会列出 cookie,但仍不会对用户进行身份验证。

更新 请参阅下面的答案。

【问题讨论】:

    标签: asp.net-mvc authentication webforms single-sign-on owin


    【解决方案1】:

    在创建两个新应用程序并使其正常工作后,我制定了基线并从那里向后工作,直到实现应用程序之间单点登录的目标。我发现了很多东西,包括:

    1. 应用程序之间的单点登录不需要 MachineKey 4.5及以上。 &lt;httpRuntime targetFramework="4.5"/&gt; 就是你所需要的。
    2. 关闭表单身份验证
    3. 最重要的是,不要尝试通过从基础项目复制来手动集成 Identity 2.x 和 OWIN,因为您可能会错过命名空间或重要文件。当你试图找到你错过的东西时,该项目将构建和运行并真正让你发疯。使用 nuget 包并删除您不需要的。

    所以最后我确实需要将 Identity 2.x 和 OWIN 添加到我的旧版 webforms 应用程序中,基本上升级到 4.5 中的新身份验证管道以使其工作。

    希望这篇文章能帮助人们节省一些宝贵的时间和精力。

    重要更新: 尝试在 IIS 中部署时,即使您没有在配置中指定任何机器密钥(并且在本地工作),它在部署时也不会工作。最后,我将 MVC 应用程序用作父应用程序,将旧版 webforms 应用程序用作子应用程序,这要求父应用程序具有以下配置;

    <machineKey decryptionKey="AutoGenerate" validationKey="AutoGenerate" />
    

    【讨论】:

    • 感谢分享!我也面临同样的挑战,你有什么源代码可以分享给我们吗?
    猜你喜欢
    • 2011-04-22
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2017-12-06
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多