表单身份验证与 OWIN UseCookieAuthentication 和子域 SSO

Form Authentication vs OWIN UseCookieAuthentication and subdomain SSO

"traditional" 表单认证和 owin 中间件(使用 UseCookieAuthentication)是否可以完美互换?

我想创建一个简单的子域 sso(如许多示例所建议的那样) Sharing authentication between parent and child web applications

我的 parent 应用程序是一个旧的 asp.net webform 应用程序,在 web.config

中配置了表单身份验证
<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" domain="localhost" />
   </authentication>
   <machineKey validationKey="E0230924313583BE9D071B5826165A7C6198A1697AE2F549535F0744FFDC414638882DDC507C7B097EAD5B4FB67819D9520D0A9D05B2D38EAB4AF0B36DAAA39F" decryptionKey="D29E22658319B16CAE17C9CD0269AB15DEAF9068FB6D459C" validation="SHA1" decryption="AES"></machineKey>
</system.web>

和 child 应用程序(在子域中)是 asp.net Mvc5(使用 owin UseCookieAuthentication)所以安全配置在 Startup.cs 而不是 web.config

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                CookieName = ".ASPXAUTH",
                CookieDomain "localhost"
                Provider = new CookieAuthenticationProvider { OnApplyRedirect = ApplyRedirect }
            });

private static void ApplyRedirect(CookieApplyRedirectContext context)
        {
            Uri absoluteUri;
            if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out absoluteUri))
            {
                var path = PathString.FromUriComponent(absoluteUri);
                if (path == context.OwinContext.Request.PathBase + context.Options.LoginPath)
                    context.RedirectUri = "http://localhost/subSiteAuthenticationTest/Account/Login" +
                        new QueryString(
                            context.Options.ReturnUrlParameter,
                            context.Request.Uri.AbsoluteUri);
            }

            context.Response.Redirect(context.RedirectUri);
        }

在 child 应用程序中 web.config 我只为 parent 应用程序配置了相同的机器密钥

<system.web>
    <authentication mode="None">
    <machineKey validationKey="E0230924313583BE9D071B5826165A7C6198A1697AE2F549535F0744FFDC414638882DDC507C7B097EAD5B4FB67819D9520D0A9D05B2D38EAB4AF0B36DAAA39F" decryptionKey="D29E22658319B16CAE17C9CD0269AB15DEAF9068FB6D459C" validation="SHA1" decryption="AES"></machineKey>
</system.web>

parent 的登录页面用于两个应用程序(为了在 chil 应用程序中使用登录页面的绝对路径,我实现了 "OnApplyRedirect" 作为这个 post说:Login page on different domain)

但这不起作用,我错过了什么吗?

Is the "traditional" form authentication and owin middleware(with UseCookieAuthentication) are perfectly interchangeable?

不幸的是,不,它们不可互换。

但是,您可以在 CookieAuthenticationOptions 中提供自定义 TicketDataFormat。

这是一个例子。

SSO for ASP.NET MVC4 and MVC5 web apps shared the same domain