在以前的ASP.NET MVC中,有一个选项可以重定向到登录操作,如果用户未经过身份验证。
我需要在ASP.NET Core中做同样的事情,因此我:
- 从Visual Studio模板创建了一个ASP.NET Core项目
- 将
[Authorize]
添加到某个任意操作 - 在浏览器中打开相应的视图
我不希望重定向,因为我还没有进行配置。但是,它自动重定向到登录操作!
这个选项在哪里/如何设置?
在以前的ASP.NET MVC中,有一个选项可以重定向到登录操作,如果用户未经过身份验证。
我需要在ASP.NET Core中做同样的事情,因此我:
[Authorize]
添加到某个任意操作我不希望重定向,因为我还没有进行配置。但是,它自动重定向到登录操作!
这个选项在哪里/如何设置?
随着当前的aspnet core版本(2.1.0),这已经改变了,现在你可以使用扩展:
使用当前的aspnet核心版本(2.1.0), 这种情况已经改变,现在您可以使用扩展功能:
services.ConfigureApplicationCookie(options => options.LoginPath = "/login");
或者 services
.AddAuthentication()
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
});
您可以在此文章中了解有关迁移到 2.0 的更多信息。
ConfigureApplicationCookie
应该放在 AddIdentity
之后。否则它就没有作用。 - Igor Mikushkin我的应用程序中重定向根本不起作用,这里的任何解决方案都没有解决它,但使用状态代码页
就可以解决:
app.UseStatusCodePages(async context =>
{
var response = context.HttpContext.Response;
if (response.StatusCode == (int)HttpStatusCode.Unauthorized ||
response.StatusCode == (int)HttpStatusCode.Forbidden)
response.Redirect("/Authentication");
});
app.UseMvc(...
app.UseMvc
之前,应该是第一个或其中之一。 - Serj Sagan您可以使用CookieAuthenticationOptions
类配置路径。
类似这样。
app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
AuthenticationType = "My-Magical-Authentication",
// etc...
},
});
这里是更新后的链接,用于CookieAuthenticationHandler
这个启动文件中的代码块对于我在 .Net Core 3.1 上运行有效。
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.LoginPath = "/Identity/Account/Login";
options.AccessDeniedPath = "/Identity/Account/AccessDenied";
options.SlidingExpiration = true;
});
对于任何感兴趣的人,也可以使用AddIdentity服务提供程序来完成此操作。
services.AddIdentity<User, IdentityRole>(options =>
{
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
options.Cookies.ApplicationCookie.AutomaticChallenge = true;
options.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
})
.AddEntityFrameworkStores<MehandiContext>()
.AddDefaultTokenProviders();
如此解释:https://dev59.com/8p3ha4cB1Zd3GeqPatk1#41643105
我在2017年4月尝试过,但"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0"
无法重定向,必须使用1.0.1
版本。
ConfigureApplicationCookie
方法。例如
services.ConfigureApplicationCookie(options => options.LoginPath = "/Account/LogIn");
更多信息,请参见此处:https://learn.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x?view=aspnetcore-2.1 - Sayyed Dawooddotnet core构建Cookie身份验证的方式是使用Identity框架。对于新项目,我建议打开命令行并执行以下操作:
dotnet new mvc -o ExampleProject --auth Individual
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddRazorPagesOptions(options =>
{
options.AllowAreas = true;
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
}
app.UseSession();
app.UseAuthentication();
app.UseStatusCodePages(context => {
var response = context.HttpContext.Response;
if (response.StatusCode == (int)HttpStatusCode.Unauthorized ||
response.StatusCode == (int)HttpStatusCode.Forbidden)
response.Redirect("/Login");
return Task.CompletedTask;
});
app.UseClaimsMiddleware();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Login}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
上面的代码在使用asp net core 3.1中的身份验证时对我很有效。
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = ".AspNetCore.Identity.Application";
options.AccessDeniedPath = "/User/PageNotAllowed";
});
public IActionResult PageNotAllowed()
{
return View();
}
PageNotAllowed
视图。builder.Services.AddAuthentication().AddCookie("YourCookieName", options =>
{
options.Cookie.Name = "YourCookieName";
options.LoginPath = "/Account/Login";
});
以上示例来自.NET 6