OWIN使用相同的MachineKey

时间:2015-05-20 09:24:25

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

我有一个遗留的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应用程序的配置更改为标准 设置(复制新项目)
  4. 新的webforms应用程序列出了cookie但仍未对用户进行身份验证。

    更新 见下面的答案。

1 个答案:

答案 0 :(得分:2)

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

  1. 在app for之间进行单点登录不需要MachineKey 4.5及以上。您只需要<httpRuntime targetFramework="4.5"/>
  2. 关闭表单身份验证
  3. 最重要的是,不要尝试通过从基础项目进行复制来手动集成Identity 2.x和OWIN,因为您可能会错过命名空间或重要文件。该项目将建立并运行,并在你试图找到你错过的东西的同时驱使你疯狂。使用nuget包并删除您不需要的内容。
  4. 所以最后我确实需要将Identity 2.x和OWIN添加到我的遗留webforms应用程序中,基本上升级到4.5中的新身份验证管道以使其正常工作。

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

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

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