【发布时间】:2015-09-09 08:55:39
【问题描述】:
我们有一个自定义 cookie 身份验证提供程序,它将身份验证 cookie 设置为带有类似 .domain.com 的主机名,而不是 domain.com 或 my.domain.com。我们这样做是为了让 cookie 跨所有子域和域工作。它很简单,如下所示。
问题
在应用程序冷启动后的第一次尝试中,cookie 仍然包含域 my.domain.com(我们的登录在 my.domain.com)尽管在执行下面的 SubdomainCookieAuthentication 代码后将其设置为 .domain.com(使用断点检查)。在随后的登录尝试中,cookie 主机名很好。
问题
我该如何解决这个问题,以便即使在第一次尝试时也能正常工作?
代码
自定义 cookie 身份验证
public class SubdomainCookieAuthentication : CookieAuthenticationProvider
{
public override void ResponseSignIn(CookieResponseSignInContext context)
{
// We need to add a "." in front of the domain name to
// allow the cookie to be used on all sub-domains too
var hostname = context.Request.Uri.Host;
// works for www.google.com => google.com
// will FAIL for www.google.co.uk (gives co.uk) but doesn't apply to us
var dotTrimmedHostname = Regex.Replace(hostname, @"^.*(\.\S+\.\S+)", "$1");
context.Options.CookieDomain = dotTrimmedHostname;
base.ResponseSignIn(context);
}
}
这个在Owin启动类里面初始化如下
班级:Startup
文件:App_start\Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new SubdomainCookieAuthentication()
});
}
【问题讨论】:
-
你解决过这个问题吗?
-
好像是bug,是时候报告github问题了
标签: c# asp.net authentication cookies owin