如何设置身份验证cookie的路径

How to set path for authentication cookie

在 ASP.NET 中,Core 6 MVC 多租户应用程序租户具有不同的路径基础,例如 /tenant1/tenant2

中间件根据请求 url.

设置 HttpContext PathBase

SignInAsync 方法始终将身份验证 cookie 路径设置为根路径 /.

我正在尝试使用以下代码片段从 PathBase 设置身份验证 cookie 路径:

Path = Request.PathBase.HasValue ? Request.PathBase.Value : "/"

下面显示的代码会引发编译时错误,因为 AuthenticationProperties 没有 Path 属性。如何设置 cookie Path 属性 以便不同的用户可以使用不同的基本路径进行身份验证?

public class AccountController : Controller 
{
    public async Task<IActionResult> LogOn(string user, string password)
    {
        if (password != "secret")
            throw new ApplicationException("Bad password");

        var claims = new List<Claim> { new Claim(ClaimTypes.Name, user) };
        var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    
        var authProperties = new AuthenticationProperties 
                                 {
                                     IsPersistent = true,
                                     AllowRefresh = true,
                                     // TODO: this throws compile error since Path property does not exist
                                     Path = Request.PathBase.HasValue ? Request.PathBase.Value : "/"
                                 };
    
        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);
    }
}

您应该可以通过自己编写 ICookieManager 并在添加 cookie 身份验证方案时进行设置来实现此目的。 ICookieManager 方法将 HttpContext 作为输入,因此您可以从那里访问 PathBase

builder.Services.AddAuthentication()
    .AddCookie("Cookie", options =>
{
    options.CookieManager = CustomCookieManager();
});

这是 ICookieManager 的默认实现:ChunkingCookieManager