CookieUseSlidingExpiration不会正确续订Cookie

时间:2016-09-13 16:07:40

标签: asp.net asp.net-core

我有点卡在这里,任何帮助都会非常感激(关于SO的第一篇文章,对不起,如果我做错了什么)。

我设法使用ASP.NET Core CookieAuthentication为每条路由创建不同的cookie。如果我调用http://host/API/moduleName1/login,它将创建一个身份验证cookie,其路径设置为/ API / moduleName1,用于仅对此路径下的呼叫进行用户身份验证。为此,我将自己插入SigningIn事件并破解了cookie路径。

我的Configure()代码:

        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationScheme = "...",
            CookieName = "...",
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            CookieHttpOnly = false,
            SlidingExpiration = true,
            Events = new CookieAuthenticationEvents
            {
                OnSigningIn = CustomAuthenticator.SigningInAsync,
                OnSigningOut = CustomAuthenticator.SigningOutAsync,
            }
        });

我的定制:

public static class CustomAuthenticator
{
    public static async Task SigningInAsync(CookieSigningInContext context)
    {
        string controller = context.HttpContext.GetRouteValue("controller").ToString();
        string moduleName = context.HttpContext.GetRouteValue("moduleName").ToString();
        context.CookieOptions.Path = context.HttpContext.Request.PathBase + "/" + controller + "/" + moduleName;
    }

    public static async Task SigningOutAsync(CookieSigningOutContext context)
    {
        string controller = context.HttpContext.GetRouteValue("controller").ToString();
        string moduleName = context.HttpContext.GetRouteValue("moduleName").ToString();
        context.CookieOptions.Path = context.HttpContext.Request.PathBase + "/" + controller + "/" + moduleName;
    }
}

它运作良好一段时间,但随后,使用设置为1分钟的Cookie ExpireSpan,我发现了令人讨厌的东西。

当我登录时,我得到一些非常符合逻辑的东西:一个具有正确设置的cookie路径的会话cookie:' / API / PLENG'

但是过了一段时间,如果我保持活动状态,由于CookieUseSlidingExpiration设置为true,中间件决定更新我的cookie,这就是我得到的:第二个cookie,其cookie路径设置为' /& #39 ;.中间件不是正确地更新我的cookie,而是创建了一个新的,完全搞乱了我的设计。

double cookie

所以我明白了,因为攻击系统是我的错,但是如果没有这种Sliding Expiration机制,我就无法生存,而我现在也不知道了。

有人可以告诉我我应该如何做到这一点(而不是破解cookie路径)?或者我如何修复有问题的Sliding Expiration = true行为。

0 个答案:

没有答案