“传统”表单身份验证和owin中间件(使用UseCookieAuthentication)是否完全可以互换?
我想制作一个简单的子域名sso(如许多示例所示) Sharing authentication between parent and child web applications
我的父应用程序是一个旧的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>
和一个子应用程序(在子域中),它是一个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);
}
子应用程序web.config中的我只为父应用程序配置了相同的机器密钥
<system.web>
<authentication mode="None">
<machineKey validationKey="E0230924313583BE9D071B5826165A7C6198A1697AE2F549535F0744FFDC414638882DDC507C7B097EAD5B4FB67819D9520D0A9D05B2D38EAB4AF0B36DAAA39F" decryptionKey="D29E22658319B16CAE17C9CD0269AB15DEAF9068FB6D459C" validation="SHA1" decryption="AES"></machineKey>
</system.web>
父级的登录页面用于两个应用程序(为了在我实现的“OnApplyRedirect”实现的chil应用程序中使用登录页面的绝对路径,正如这篇文章所说:Login page on different domain)
但这不起作用,我错过了什么吗?
答案 0 :(得分:2)
“传统”表单身份验证和owin中间件(使用UseCookieAuthentication)是否完全可以互换?
不幸的是,不,它们不可互换。
但是,您可以在CookieAuthenticationOptions中提供自定义TicketDataFormat。
这是一个例子。
SSO for ASP.NET MVC4 and MVC5 web apps shared the same domain