在Startup.cs文件中的ConfigureServices方法中添加以下代码:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.Name = "MyCookie";
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
options.AccessDeniedPath = "/Account/AccessDenied";
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
options.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = context =>
{
context.Response.Headers["Location"] = context.RedirectUri;
context.Response.StatusCode = 401;
return Task.CompletedTask;
}
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
解决方法说明:
首先,我们使用AddAuthentication方法来添加CookieAuthenticationDefaults作为默认身份验证方案。
然后,我们使用AddCookie方法为Cookie身份验证设置一些选项,包括Cookie名称,登录路径,注销路径,访问拒绝路径,Cookie过期时间,是否启用滑动过期等。
接下来,我们为Cookie身份验证设置一些安全选项,如配置HttpOnly、Secure和SameAsRequest。
最后,我们使用Events属性来处理身份验证事件,在这里我们使用OnRedirectToLogin事件来重定向到登录页面。
我们还使用AddAuthorization方法添加一个名为"AdminOnly"的策略,该策略要求用户必须在"Admin"角色下。
使用此方法配置Cookie身份验证将确保其正常工作,并且使用策略可以保护特定的控制器操作,以确保只有授权的用户才能访问。