我有点卡在这里,任何帮助都会非常感激(关于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,而是创建了一个新的,完全搞乱了我的设计。
所以我明白了,因为攻击系统是我的错,但是如果没有这种Sliding Expiration机制,我就无法生存,而我现在也不知道了。
有人可以告诉我我应该如何做到这一点(而不是破解cookie路径)?或者我如何修复有问题的Sliding Expiration = true行为。