如何设置身份验证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
在 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